1. 程式人生 > 其它 >實驗4 8086標誌暫存器及中斷

實驗4 8086標誌暫存器及中斷

實驗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的結果

可以看到沒有任何區別,這是因為程式碼中給出的資料不會產生任何進位,所以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的結果

add的結果

這就有了區別了
後16位的運算需要用到前16位運算的進位值,所以不能用add
因為根據之前的實驗,add

會對CF標誌暫存器造成影響,inc則不會。

執行並觀察資料段的變化

做加法之前

做加法後

可以看到進行了加法,但並沒有產生進位