实验4 8086标志寄存器及中断

实验4 8086标志寄存器及中断

实验任务1

任务点1

验证add对ZF和CF的影响

实验4 8086标志寄存器及中断
可以看到对ZF和CF都造成了影响

验证inc对ZF和CF的影响

实验4 8086标志寄存器及中断
只对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的结果
实验4 8086标志寄存器及中断
add的结果
实验4 8086标志寄存器及中断
可以看到没有任何区别,这是因为代码中给出的数据不会产生任何进位,所以addinc在这种特殊的情况下无区别
下面修改代码里面的数据,使其能产生进位

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的结果
实验4 8086标志寄存器及中断
add的结果
实验4 8086标志寄存器及中断
这就有了区别了
后16位的运算需要用到前16位运算的进位值,所以不能用add
因为根据之前的实验,add会对CF标志寄存器造成影响,inc则不会。

运行并观察数据段的变化

做加法之前
实验4 8086标志寄存器及中断
做加法后
实验4 8086标志寄存器及中断
可以看到进行了加法,但并没有产生进位

上一篇:实验4 8086标志寄存器及中断


下一篇:dedecms织梦后台登陆出现空白解决办法