实验4 8086标志寄存器及中断
实验任务1
任务点1
验证add对ZF和CF的影响
可以看到对ZF和CF都造成了影响
验证inc对ZF和CF的影响
只对ZF造成影响
测试代码如下
assume cs:code,ds:data
data segment
db 16 dup(0)
data ends
stack segment
db 128 dup(0)
top equ $+1
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,top
mov ax,0ffffh
add ax,1
;测试add对CF和ZF的影响
mov ax,1
add ax,1
;恢复测试之前的影响,即无进位
mov ax,0ffffh
inc ax
;测试inc对CF和ZF的影响
mov ah,4ch
int 21h
code ends
end start
任务点2
TASK_1.ASM代码
assume cs:code, ds:data
data segment
x dw 1020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031h;一个128位数字
y dw 3210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912h;一个128位数字
data ends
code segment
start:
mov ax, data
mov ds, ax
mov si, offset x
mov di, offset y
call add128
mov ah, 4ch
int 21h
add128:
push ax
push cx
push si
push di
sub ax, ax
mov cx, 8
s: mov ax, [si]
adc ax, [di]
mov [si], ax
inc si
inc si
inc di
inc di
loop s
pop di
pop si
pop cx
pop ax
ret
code ends
end start
对于inc
能否用add
替换的回答
inc
的结果add
的结果
可以看到没有任何区别,这是因为代码中给出的数据不会产生任何进位,所以add
和inc
在这种特殊的情况下无区别
下面修改代码里面的数据,使其能产生进位
data segment
x dw 9020h, 2240h, 9522h, 5060h, 3359h, 6652h, 2530h, 7031h
y dw 9210h, 5510h, 6066h, 5121h, 8801h, 6210h, 7119h, 3912h
data ends
inc
的结果add
的结果
这就有了区别了
后16位的运算需要用到前16位运算的进位值,所以不能用add
因为根据之前的实验,add
会对CF
标志寄存器造成影响,inc
则不会。
运行并观察数据段的变化
做加法之前
做加法后
可以看到进行了加法,但并没有产生进位