设计一个程序段,将AX和BX中的8位BCD数加CX和DX中的8位BCD数(AX和CX是最高有效寄存器),加后的结果必须存人CX和DX中。
设计一个程序段,将AX和BX中的8位BCD数加CX和DX中的8位BCD数(AX和CX是最高有效寄存器),加后的结果必须存人CX和DX中。
例如:
原信息为:12H,D9H,86H,54H,……
结果为:BEH,CCH,12H,DDH,EDH,0DH,0EH,D9H,0DH,0EH,BEH,CCH,86H,DDH,EDH,BEH, CCH,86H,DDH,EDH,……
部分程序已给出,其中原始数据由过程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 5*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
CLP1: MOV AL, [SI]
MOV BL,AL
MOV AH,AL
(1)
AND AL,0FOH
(2)
MOV CL,4
(3)
POP CX
CMP (4)
JA CLP2
CMP AH,9
JA CLP2
MOV (5)
INC DI
&nbs
A.16位被除数AX与8位源操作数相除
B.32位被除数DX、AX与16位源操作数相除
C.商在AX寄存器,余数在DX寄存器中
D.带符号除法的商和余数都是补码表示的数
1. BUFF为字节类型变量,DATA为常量,指出下列指令中源操作数的寻址方式:(10分) (1)MOV AX, 1200 (2)MOV AL, BUFF (3)SUB BX, [2000H] (4)MOV CX, [SI] (5)MOV DX, DATA[SI] (6)MOV BL, [SI][BX] (7)MOV [DI], AX (8)ADD AX, DATA[DI+BP] (9)PUSHF (10) MOV BX, ES:[SI] 2. 指出下列指令的错误并改正。(5分) (1)MOV DS, 1200 (2)MOV AL, BX (3)MOV [BX], [SI] (4)MOV [DI], 3 (5)OUT 3F8H, AL 3. 根据要求写出一条(或几条)汇编语言指令。(4分) (1)将立即数4000H送入寄存器BX。 (2)将变址寄存器DI的内容送入数据段中2000H的存储单元。 (3)将立即数3DH与AL相加,结果送回AL。 (4)把BX与CX寄存器内容相加,结果送入AX。 4. 设SS=2000H,SP=1000H,SI=2300,DI=7800,BX=9A00H。说明执行下面每条指令时,堆栈内容的变化和堆栈指针的值。(3分) PUSH SI PUSH DI POP BX 5. 回答下列问题:(3分) (1)设AL=7FH,执行CBW指令后,AX=? (2)设AX=8A9CH,执行CWD指令后,AX=?DX=? 6、用串操作指令替换以下程序段:(5分) ABC:MOV AL, [SI] MOV ES:[DI], AL INC SI INC DI LOOP ABC
请编制程序,其功能为:内存中存放着10个二进制数,需对此数组进行加密。方法为将前一个字节数(两位十六进制数a1a2表示)的低位十六进制数a2与后一个字节数(两位十六进制数b1b2表示)的高位十六进制数b1进行交换:第一个字节数的高位十六进制数与最后一个字节的低位十六进制数进行交换,加密后的结果存入内存。
例如:内存中原始数据为:50H,61H,72H,83H,94H,…,E9H
结果:90H,07H,18H,29H,3AH,…,85H
部分程序已经给出,其中原始数据由LOAD 过程从文件INPUT1.DAT 中读入从SOURCE开始的内存单元,转换结果(要求从RESULT开始读入)由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整,完成要求的功能。或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1. EXE执行文件,最终产生运行结果。
部分程序如下:
;PROG1.ASM
EXTRN LOAD:FAR, SAVE:FAR
N EQU 10
DSEG SEGMENT
SOURCE DW N DUP ()
RESULT DW N DUP (0)
NAME0 DB 'INPUT1.DAT',0
NAME1 DB 'OUTPUT1.DAT',0
DSEG ENDS
SSEG SEGMENT STACK
DB 128 DUP ()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG;SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX, DSEG
MOV DS,AX
MOV ES, AX
LEA DX,SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
MOV DI,0
MOV SI,0
MOV CX,N
CONT: MOV AL, SOURCE [SI]
MOV AH,AL
AND AL,0FH
AND AH,0F0H
INC SI
CMP SI,N
____________
MOV SI,0
ONE: MOV BL, SOURCE [SI]
MOV BH,BL
AND BL,0FH
AND BH,0FOH
____________
MOV CX,4
LI: SBR BH, 1
SHL AL,1
LOOP L1
______,CX
OR AH,BH
OR AL,BL
CMP DI, 0
JNZ STOPE1
MOV SOURCE [SI] ,AL
DEC SI
MOV SOURCE [SI], AH
INC SI
JMP NEXT
STORE1: CMP DI, N-1
JL STORE2
MOV RESULT [DI], AH
MOV DI, 0
MOV RESULT [DI], AL
JMP NEXT
STORE2: MOV ______, AH
MOV ______, AL
NEXT: INC DI
LOOP CONT
; *** END ***
LEA DX, RESULT
LEA SI, NAME1
MOV CX, N
CALL SAVE
RET
START ENDP
CSEG ENDS
END START
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!