1.设CPU各个标志位的初始状态均为0,执行指令:
MOV AX,0
DEC AX
后,请问AX=?,SF=?,CF= ?(3分)
AX=FFFFH或-1 (1分), SF=1(1分), CF=0(1分)
(DEC 变量递减一。
MOV AX,0;AX=0;DEC AX;AX=AX-1=-1=FFFFH;SF(符号标志):SF用于反映本次运算结果是正还是负,若某次运算结果的最高位(第8位或第16位)为“1”,则SF=1,否则SF=0;CF(进位标志):保存加法的进位和减法的借位,有进位或借位时CF=1,否则CF=0;结果为-1,所以SF=1,而本题中的借位是溢出借位,故而CF=0)
2.下面程序段的功能是从240H端口读取数据,测试其是否为20H,若不是则将241H端口清0,否则转向NEXT,请将程序补充完整。
(5分)
MOV DX ,240H;端口号放入段寄存器
IN AL,DX;输入数据
CMP AL, 20H;测试是否为20H
JZ NEXT;如果不是转到NEXT
MOV DX,241H
MOV AL,0;将端口数据清零
OUT DX,AL
……
N EXT: ……
1. 定义变量DA1 DB ‘1+2=?’
DA2 DW 2 DUP (0)
NUM EQU $-DA1
分析以下指令执行后寄存器的内容,并填在指令后的横线上。
(5分)
SUB AX, AX
MOV AL,DA1 ;AL=31H;DA1=3
MOV BL,DA2-DA1 ;BL=05H
MOV CX,NUM ;CX=09H
L1:RCL AL,1
JNC L2
INC AH
L2:LOOP L1
程序段执行完后AL=31H,AH=03H
2. 两个压缩BCD数相加,结果保存在内存的SUM单元,如有进位保存在AH中,将下面的程序段补充完整。
(3分)
X1 DB 36H
X2 DB 78H
SUM DB ?, ?
MOV AL,X1
MOV BL,X2
ADD AL,BL
DAA;将两个压缩BCD数相加后一定要用DAA
JC L1
MOV AH,0
JMP L2
L1:MOV AH,1
L2 :MOV SUM ,AL
MOV [SUM+1], AH
1.设初值为AX=1234H,BX=5678H,DX=0ABCDH,则下面一段程序:
MOV CL,4;CL=4
SHL DX,CL;SHL逻辑左移;DX=0BCD0H
MOV BL,AH;BX=5612H
SHL AX,CL;AX=2340H
SHR BL,CL;SHR逻辑右移;BL=01H
OR DL,BL;OR两者相或;DL=D0H,BL=01H;OR DL,BL;DL=D1H
执行后,请问AX=?,BX=?,DX=?(3分)
AX=2340H;BX=5601H;DX=0BCD1H
2.下面程序段的功能是求5到50之和,并将结果存放到SUM单元中,请将程序补充完整。
(5分)
SUM DW 0
……
MOV CX, 46
MOV BX, 5
MOV AX, 0
L1: ADD AX,BX
INC BX
LOOP L1
MOV SUM,AX。