1、設 AX=3000H,BX=5000H;請編一程序段將 AX 和 BX 的內容進行交換。 要求:
(1)分別用 3 種方法實現;
(2)用 DEBUG 進行彙編與調試;
(3)記錄每種方法執行結果
(1)分別用 3 種方法實現
- 方法一:使用指令
DATA SEGMENT
X DW 3000H
Y DW 5000H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV BX,Y
XCHG AX,BX
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 方法二:利用一箇中間量交換,
DATA SEGMENT
X DW 3000H
Y DW 5000H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV BX,Y
MOV CX,AX
MOV AX,BX
MOV BX,CX
MOV AH,4CH
INT 21H
CODE ENDS
END START
- 方法三:利用堆棧實現
DATA SEGMENT
X DW 3000H
Y DW 5000H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV BX,Y
PUSH AX
PUSH BX
POP AX
POP BX
MOV AH,4CH
INT 21H
CODE ENDS
END START
(2)用 DEBUG 進行彙編與調試
- 方法一
- 方法二
- 方法三
(3)記錄每種方法執行結果
- 方法一
- 方法二
- 方法三
2、分別執行以下指令,比較立即尋址和直接尋址間的區別,寄存器尋址、寄存器間接尋址和相 對寄存器尋址間的區別。
(1)Mov ax,1000H Mov ax,[1000h]
(2)
mov bx,2000H mov ax,bx mov ax,[bx] mov ax,30[bx]
要求:
(1)在執行以上指令時,記下當時 DS 數據段的值,寫出每條指令執行後 AX 的結果。
(2)用 E命令修改指令偏移地址“1000h”處的值,再次執行“Mov ax,[1000h]”,指令, 記錄執行結果。
3、已知有如下程序段:
MOV AX,5678H MOV CL,4 STC ;設置 CF=1 在以上程序段的基礎上,分別執行以下指令,觀察 AX 值的變化。 ROL AX,CL ROR AX,CL SHL AX,CL SHR AX,CL SAR AX,CL RCL AX,CL RCR AX,CL
試在 DEBUG 下用 A 命令彙編以上程序段,用 T 命令跟蹤,觀察以下內容:
(1)每條指令執行完後,AX 寄存器的內容是什麼?
(2)每條指令執行完後,進位位 CF、符號位 SF 和零標誌位 ZF 的值是什麼?
標準位 | 1 | 0 |
---|---|---|
進位標誌CF | CY | NC |
符號標誌SF | NG | PL |
零標誌ZF | ZR | NZ |