假定(AL)=75H,(CH)=29H,依次执行SUBAL,CH指令和DAS指令后,AL值为()。

A:9eH B:46H C:4cH D:04H

请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII码,并在最高位增加偶校验位,结果存放到RESULT指示的内存区域内。
例如:
原压缩BCD码:26H,75H,91H,33H,……
结果为:B2H,36H,B7H,35H,39H,B1H,33H,33H,……
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。
试题程序:
EXTRN LOAD:FAR, SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP ( )
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB 2*N DUP(0)
NAME0 DB ’INPUT1.DAT’,0
NAME1 DB ’OUTPUT1.DAT’,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ; 置附加段寄存器
LEA DX,SOURCE ; 数据区起始地址
LEA SI,NAME0 ; 原始数据文件名
MOV CX,N ; 字节数
CALL LOAD ; 从INPUT1.DAT中读取数据
; **** BEGIN ****
LEA SI,SOURCE
MOV DI,OFFSET RESULT
MOV CX,N
SERCHI: MOV (1)
MOV AH,AL
AND AH,0FH
AND AL,0FOH
PUSH CX
MOV CL,4
(2)
(3)
ADD AL,30H
(4)
OR AL,80H
SERCH2: MOV [DI],AL
INC DI
(5)
JP SERCH3
OR AH,80H
SERCH3: MOV [DI],AH
INC DI
INC SI
(6) SERCH1
; **** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名起始地址
MOV CX,2*N ; 字节数
CALL SAVE ; 保存结果到OUTPUT1.DAT文件中
RET
START ENDP
CODE ENDS
END START

(A) AL, [SI] (B) ROR AL, CL (C) POP CX
(D) JP SERCHB (E) ADD AH, C0H (F) LOOP

请编制程序PROG1.ASM,其功能是:将一数据采集系统中采集的80个字节无符号数(已存于SOURCE开始的内存区域)按算术平均数字滤波方法进行数字滤波,每8个数求一个平均值(舍去余数)。将10个平均值依次写入RESULT指示的内存区域内。
例如:
原采集数据:1EH,31H,31H,33H,58H,75H,38H,34H,49H,A2H,98H,DFH,99H,64H,64H,B7H……
结果为:3DH,CCH……
部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。
填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。
试题程序:
EXTRN LOAD:FAR, SAVE:FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP ( )
STAC ENDS
DATA SEGMENT
SOURCE DB 8*N DUP(0)
RESULT DB N DUP(0)
NAME0 DB ’INPUT1.DAT’,0
NAME 1 DB ’OUTPUT1.DAT’,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,SOURCE ; 数据区起始地址
LEA SI,NAME0 ; 原始数据文件名
MOV CX,8*N ; 字节数
CALL LOAD ; 从INPUT1.DAT中读取数据
; **** BEGIN ****
LEA SI,SOURCE
MOV (1)
MOV DX,N
MAGN1: XOR AX,AX
XOR BX,BX
MOV CX, (2)
MAGN2: MOV AL,[SI] ; 取数并求和放BX中
ADD BX, (3)
INC SI
(4)
MOV AX,BX
(5)
(6)
(7)
(8)
DEC DX
(9) MAGN1
; **** END ****
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAME1 ; 结果文件名起始地址
MOV CX,N ; 字节数
CALL SAVE ; 保存结果到OUTPUT1.DAT文件中
RET
START ENDP
CODE ENDS
END START

(A) DI, OFFSETRESULT (B) H (C) AX (D) LOOP MAGNB
(E) MOV CL,H (F) DIV CL (G) MOV [DI],AL
(H) INC DI (I)JNZ

请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个 ASCII值,并在每个ASCII值的最高位增加偶校验位,结果存放在RESULT指示的内存区域。
例如:
原压缩BCD码:26H,75H,91H,33H…
结果为: B2H,36H,B7H…
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段原程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
[试题程序]
EXTRN LOAD://FAR,SAVE://FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP( )
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB 2*N DUP(0)
NAME0 DB ’INPUT1.DAT’,0
NAME1 DB ’OUTPUT1.DAT’,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;置附力,段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NANE0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从’INPUT1.DAT’ 中读取数据
; *************BEGIN *************
LEA SI,SOURCE
MOV DI,OFFSET RESULT
MOV CX,N
SERCH1: MOV (1)
MOV AH,AL
AND AH,0FH
AND AL,0FOH
PUSH CX
MOV CL,4
(2)
(3)
ADD AL,30H
(4)
OR AL,80H
SERCH2: MOV [DI],AL
INC DI
(5)
JP SERCH3
OR AH,80H
SERCH3: MOV [DI],AH
INC DI
INC SI
(6) SERCH1
; ******** END ***********
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAMEl ;结果文件名起始地址
MOV CX,2*N ;字节数
CALL SAVE ;保存结果到,OUTPUT1.DAT,文件中
RET
START ENDP
CODE ENDS
END START

(1)AL,[SI] (2)SHRAL,CL (3)POPCX
(4)JP SERCH2 (5)ADDAH,30H (6)LOOP

请编制程序,其功能是:将一数据采集系统中采集的80个字节无符号数(已存于SOURCE开始的内存区域)按算术平均数字滤波方法进行数字滤波,每8个数求一个平均值(含去余数)。将10个平均值依次写入RESULT指示的内存区域。 例如: 原采集数据 1EH,31H,31H,33H,58H,75H,38H,34H,49H,A2H,98H, DFH,99H,64H,64H,B7H,… 结果为 3DH,CCH,… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程宋完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序:

(A)DI,OFFSET RESULT
(B)H
(C)AL
(D)LOOPMAGNB
(E)MOVCL,H
(F)DIVCL
(G)MOV [DI], AL
(H)INC DI
(I)JNZ[解析]
系统中有80个字节无符号数,此程序要实现的功能是,每8个数求算术平均值,一共求出10纽平均值。
程序的堆栈段定义了一个128字节的堆栈区.堆栈段下面是数据段。数据段中定义了四个字节型变量,原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。先将原始数据的偏移地址送SI中,结果数据存放的偏移地址送DI中。所以第(1)空填写"DI,OFFSET RESULT"。DI中存放平均值。DX赋初值为N,寄存器AX和BX清0。
第(2)空CX是作为循环的次数,所以根据题意,CX应该等于8,即循环求8次和。接着将SI中内容送AL中,开始求和,将BX与AL相加,结果存放在BX中。所以第(3)空填写 "AL"。SI地址加1,循环取下一个数据,继续求和。循环入口处为MAGN2,所以第(4)空填写"LOOP MAGN2"。
求完8个数的和之后,接着要求平均值,先给CL赋值为8,再用8个数的和AX除以CL,得到平均值。第(5)、(6)空分别填写"MOVCL,8","DIV CL"。
第(7)、(8)空是将平均值结果存放到结果数据区DI中,DI地址加1,存放下一个平均值。
从第(9)空的前一条指令理解,每次求完8个数的平均值,DX减1,当DX不为。时,说明10组平均值还没有求完,转向MAGN1开始的指令处继续求下一组8个数的平均值。所以第(9)空填写"JNZ"。

请编制程序,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个 ASCII值,并在每个ASCII值的最高位增加偶校验位,结果存放在RESULT指示的内存区域。
例如:
原压缩BCD码:26H,75H,91H,33H…
结果为: B2H,36H,B7H…
部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
请填空BEGIN和END之间已经给出的一段原程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。
[试题程序]
EXTRN LOAD://FAR,SAVE://FAR
N EQU 10
STAC SEGMENT STACK
DB 128 DUP( )
STAC ENDS
DATA SEGMENT
SOURCE DB N DUP(0)
RESULT DB 2*N DUP(0)
NAME0 DB ’INPUT1.DAT’,0
NAME1 DB ’OUTPUT1.DAT’,0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAC
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX ;置附力,段寄存器
LEA DX,SOURCE ;数据区起始地址
LEA SI,NANE0 ;原始数据文件名
MOV CX,N ;字节数
CALL LOAD ;从’INPUT1.DAT’ 中读取数据
; *************BEGIN *************
LEA SI,SOURCE
MOV DI,OFFSET RESULT
MOV CX,N
SERCH1: MOV (1)
MOV AH,AL
AND AH,0FH
AND AL,0FOH
PUSH CX
MOV CL,4
(2)
(3)
ADD AL,30H
(4)
OR AL,80H
SERCH2: MOV [DI],AL
INC DI
(5)
JP SERCH3
OR AH,80H
SERCH3: MOV [DI],AH
INC DI
INC SI
(6) SERCH1
; ******** END ***********
LEA DX,RESULT ; 结果数据区首址
LEA SI,NAMEl ;结果文件名起始地址
MOV CX,2*N ;字节数
CALL SAVE ;保存结果到,OUTPUT1.DAT,文件中
RET
START ENDP
CODE ENDS
END START

(1)AL,[SI] (2)SHRAL,CL (3)POPCX
(4)JP SERCH2 (5)ADDAH,30H (6)LOOP

请编制程序,其功能是:将一数据采集系统中采集的80个字节无符号数(已存于SOURCE开始的内存区域)按算术平均数字滤波方法进行数字滤波,每8个数求一个平均值(含去余数)。将10个平均值依次写入RESULT指示的内存区域。 例如: 原采集数据 1EH,31H,31H,33H,58H,75H,38H,34H,49H,A2H,98H, DFH,99H,64H,64H,B7H,… 结果为 3DH,CCH,… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程宋完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序:

(A)DI,OFFSET RESULT
(B)H
(C)AL
(D)LOOPMAGNB
(E)MOVCL,H
(F)DIVCL
(G)MOV [DI], AL
(H)INC DI
(I)JNZ[解析]
系统中有80个字节无符号数,此程序要实现的功能是,每8个数求算术平均值,一共求出10纽平均值。
程序的堆栈段定义了一个128字节的堆栈区.堆栈段下面是数据段。数据段中定义了四个字节型变量,原始数据区SOURCE、结果数据区RESULT、原始数据文件名NAME0、结果数据文件名NAME1。数据段下面是代码段,告诉汇编程序,代码段、数据段和堆栈段分别属于段寄存器CS、DS、SS。先将原始数据的偏移地址送SI中,结果数据存放的偏移地址送DI中。所以第(1)空填写"DI,OFFSET RESULT"。DI中存放平均值。DX赋初值为N,寄存器AX和BX清0。
第(2)空CX是作为循环的次数,所以根据题意,CX应该等于8,即循环求8次和。接着将SI中内容送AL中,开始求和,将BX与AL相加,结果存放在BX中。所以第(3)空填写 "AL"。SI地址加1,循环取下一个数据,继续求和。循环入口处为MAGN2,所以第(4)空填写"LOOP MAGN2"。
求完8个数的和之后,接着要求平均值,先给CL赋值为8,再用8个数的和AX除以CL,得到平均值。第(5)、(6)空分别填写"MOVCL,8","DIV CL"。
第(7)、(8)空是将平均值结果存放到结果数据区DI中,DI地址加1,存放下一个平均值。
从第(9)空的前一条指令理解,每次求完8个数的平均值,DX减1,当DX不为。时,说明10组平均值还没有求完,转向MAGN1开始的指令处继续求下一组8个数的平均值。所以第(9)空填写"JNZ"。

微信扫码获取答案解析
下载APP查看答案解析