...的值分别为45和54,用汇编语言交换两个寄存器的数
发布网友
发布时间:2024-04-05 01:48
我来回答
共1个回答
热心网友
时间:2024-04-05 04:58
可以通过四种方式交换两个寄存器数据:
1.
使用栈作为中间变量
SSEG
SEGMENT
STACK
DB
32
DUP
(?)
SSEG
ENDS
CSEG
SEGMENT
assume
CS:CSEG,
SS:SSEG
Main:
mov
AX,
SSEG
mov
SS,
AX
mov
SP,
32h
;
初始化栈段及栈指针
mov
AX,
4500h
mov
BX,
5400h
;
因一个栈单元为16位,故需要将AX和BX作为整体存放
;
AL和BL的值可以设置成任意(0-ffh)
push
AX
push
BX
pop
AX
pop
BX
mov
AH,
4ch
;
21h中断,返回DOS
int
21h
CSEG
ENDS
END
Main
2.
在非栈存储空间中使用中间变量
DSEG
SEGMENT
Value
DB
8
DUP
(?)
DSEG
ENDS
CSEG
SEGMENT
assume
CS:SCEG,
DS:DSEG
Main:
mov
AX,
DSEG
mov
DS,
AX
mov
SI,
OFFSET
Value
;
设置DS:SI指向中间变量
mov
AH,
45
mov
BH,
54
mov
BYTE
PTR
[SI],
AH
;
AH
->
Value
mov
AH,
BH
;
BH
->
AH
mov
BH,
BYTE
PTR
[SI]
;
Value
->
BH
mov
AH,
4ch
int
21h
CSEG
ENDS
END
Main
3.
使用交换指令
CSEG
SEGMENT
assume
CS:CSEG
Main:
mov
AH,
45
mov
BH,
54
xchg
AH,
BH
mov
AH,
4ch
int
21h
CSEG
ENDS
END
Main
4.
使用除AH和BH的任意八位通用寄存器交换数据
CSEG
SEGMENT
assume
CS:CSEG
Main:
mov
AH,
45
mov
BH,
54
mov
CH,
AH
mov
AH,
BH
mov
CH,
BH
mov
AH,
4ch
int
21h
CSEG
ENDS
END
Main
因返回操作系统前,AH作为入口参数,其值已经发生改变,故只能在debug下查看运行结果。否则需要修改21h号DOS功能调用的入口参数。