實驗4 8086標誌暫存器及中斷
阿新 • • 發佈:2021-12-06
實驗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
則不會。
執行並觀察資料段的變化
做加法之前
做加法後
可以看到進行了加法,但並沒有產生進位