1、设 AX=3000H,BX=5000H;请编一程序段将 AX 和 BX 的内容进行交换。 要求:
(1)分别用 3 种方法实现;
(2)用 DEBUG 进行汇编与调试;
(3)记录每种方法执行结果
(1)分别用 3 种方法实现
- 方法一:使用 X C H G XCHG XCHG指令
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
- 方法二:利用一个中间量 C X CX CX交换 A X AX AX, B X BX BX
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 |