建議先自己思考問題的答案,不懂則返回看書
7ch中斷例程如下:
;bx表示兩標號之間的轉移位移
lp: push bp
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx
lpret:
pop bp
iret
1、在上面的內容中,用7ch中斷例程實現loop的功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?此題存在幾個困惑的點,仁者見仁,智者見智,以下僅為我自己的觀點看法,敬請指正。
首先,在上面的例程中,模擬實現的是loop功能。此外,只有add [bp+2],bx指令可以進行 『較大』 位移,更細點來看,只有bx的值可以改變位移,具體分析如下:
(1)、此中斷例程實現的是 loop 功能,而 loop 是短轉移指令,範圍為 [-128,+127], 所以從這個角度來看,最大轉移位移是128.
(2)、從bx的角度來看,若視bx為有符號數,則bx的範圍為 [-32768,+32767] , 此時最大轉移為32768;若視bx為無符號數,則bx的範圍為 [0,65535], 此時最大轉移為65535.
當然針對上述疑問,在dosbox中測試幾組資料便可得知。而顯示結果是此例程的轉移位移是 65535 。當然這只是我的結論,每個人都有自己的見解,仁者見仁智者見智。
2、用7ch中斷例程完成jmp near ptr s指令功能,用bx向中斷例程傳送轉移位移。
應用舉例:在螢幕的第12行,顯示data段中以0結尾的字串。
assume cs:code
data segment
db 'conversation',0
data ends
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset cst
mov ax,0
mov es,ax
mov di,200h
mov cx,offset ce - offset cst
cldrep movsb
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,12*160+35*2
s: cmp byte ptr [si],0
je ok
mov al,ds:[si]
mov es:[di],al
inc si
add di,2
mov bx,offset s - offset ok
int 7ch
ok: mov ax,4c00h
int 21h
cst:
push bp
mov bp,sp
add [bp+2],bx
pop bp
iret
ce: nop
code ends
end start
此**在dosbox下的執行結果截圖:
《組合語言》檢測點13 1
1 在上面內容中,我們用7ch中斷例程實現loop的功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?在7ch中斷例程中,位移的轉移是通過bx中儲存的offset來實現的,因此,理論上來說,最大轉移位移取決於bx中資料的大小,而bx是乙個16位的暫存器,最大值為65535。2 用7ch中斷例...
組合語言檢測點11 1詳細解析
建議先自己思考問題的答案,不懂則返回看書 分析 zf 記錄結果是否為零。結果為零,則zf為1 結果為1,則zf為0 pf 記錄結果中二進位制形式下1的個數是否為偶數。若1的個數是偶數,則pf 1 若1的個數是奇數,則pf 0 sf 記錄結果是否為負。若結果為負,則sf 1 若結果非負,則sf 0 注...
組合語言檢測點11 4詳細解析
建議先自己思考問題的答案,不懂則返回看書 下面的程式執行後 ax 析 pushf 和 popf 是對標誌暫存器的操作指令,本質上還是對資料的操作,標誌暫存器是16位,與通用暫存器 ax,bx 不一樣的是它是按 位 起作用的,即每一 位 都有它自己的含義,而通用暫存器整體表示乙個含義。具體分析 mov...