汇编语言程序示例

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录