汇编语言程序:数据操作和数值转换
汇编语言程序示例
1. 数据位操作与拼接
已知 AX=1234H,BX=55AAH,CX=6789H,写一段程序实现:将 AX 寄存器中的中间 8 位取反、BX 的低 4 位和 CX 的高 4 位分别作为新数的中间 8 位、低 4 位、高 4 位拼接成一个新字送到数据段中以 DI 为偏移地址的字存储单元中。
MOV AH, AL ; 将 AX 寄存器中的中间 8 位取反
XOR AL, 0FFH
MOV BL, BH ; 将 BX 的低 4 位作为新数的中间 8 位
SHR BX, 4
MOV CH, CL ; 将 CX 的高 4 位作为新数的高 8 位
SHL CX, 4
MOV CL, BL ; 将 BX 的中间 4 位作为新数的低 4 位
AND CL, 0FH
MOV [DI], CX ; 将新数送到数据段中以 DI 为偏移地址的字存储单元中
2. 32 位无符号数除以 4
已知 DX:AX 存放有一个 32 位无符号数,试写一段程序实现将其除以 4,结果存 DX:AX 中(商的整数部分)。
SHR AX, 2 ; 将 AX 右移两位,相当于除以 4
RCL DX, 1 ; 将 DX 左移一位,将 AX 的最高位移入 DX 的最低位
3. 十六进制数输出
已知以 BX=76ADH,编写 3 个程序分别实现将 BX 的值以(1)二进制(2)十六进制(3)十进制形式输出。
(1) 二进制形式输出
MOV CX, 16
MOV AH, 2
L1:
SHR BX, 1
JC L2
MOV DL, '0'
JMP L3
L2:
MOV DL, '1'
L3:
INT 21H
LOOP L1
(2) 十六进制形式输出
MOV AX, BX
MOV CX, 4
CALL HEX
; 结果存放在 DX 中,可以使用 INT 21H, AH=2 输出
HEX:
MOV BX, 10
XOR DX, DX
DIV BX
PUSH DX
DEC CX
JNZ HEX
MOV SI, OFFSET HEXSTR
MOV CX, 4
L1:
POP DX
AND DL, 0FH
ADD DL, 30H
CMP DL, '9'
JBE L2
ADD DL, 7
L2:
MOV [SI], DL
INC SI
LOOP L1
MOV DL, '$'
MOV [SI], DL
RET
HEXSTR DB 6 DUP (?)
(3) 十进制形式输出
MOV AX, BX
MOV CX, 5
CALL DEC
; 结果存放在 DX 中,可以使用 INT 21H, AH=2 输出
DEC:
MOV BX, 10
XOR DX, DX
DIV BX
PUSH DX
DEC CX
JNZ DEC
MOV SI, OFFSET DECSTR
MOV CX, 5
L1:
POP DX
ADD DL, 30H
MOV [SI], DL
INC SI
LOOP L1
MOV DL, '$'
MOV [SI], DL
RET
DECSTR DB 6 DUP (?)
说明:
- 以上程序示例仅供参考,实际应用中需要根据具体需求进行修改。
- 代码中使用了一些汇编指令,例如 MOV、SHR、SHL、XOR、AND、INT 等,这些指令的具体功能可以参考汇编语言教材或相关文档。
- 程序中使用了 PUSH 和 POP 指令实现栈操作,用于保存和恢复数据。
- 程序中使用了 JNZ 指令进行循环控制。
- 程序中使用了 CMP 指令进行比较,例如与 '9' 比较,用于判断是否需要进行字符转换。
- 程序中使用了 ADD 指令进行字符转换,将 ASCII 码值转换为对应的字符。
- 程序中使用了 RET 指令返回调用程序。
- 程序中使用了 OFFSET 指令获取数据段中变量的地址。
- 程序中使用了 DB 指令定义字符串变量。
- 程序中使用了 DUP 指令重复定义字符串变量。
- 程序中使用了 $ 字符作为字符串的结束符。
- 程序中使用了 INT 21H 指令进行中断调用,用于输出结果。
总结:
以上程序示例展示了汇编语言的基本操作,包括数据操作、数值转换、循环控制、中断调用等。通过这些示例,可以帮助初学者了解汇编语言的基本语法和编程方法。
原文地址: https://www.cveoy.top/t/topic/nd6T 著作权归作者所有。请勿转载和采集!