文章目录
前言
作为一名在校大学生,我将近期所学的知识进行总结。
一年之后我再看这些代码,我发现这些代码对于初学者十分友好。因此,我将这些代码分享给大家,希望大家能有所收获。如有不足,欢迎交流。
推荐可以看这位B站up主的视频学习汇编
提示:以下是本篇文章正文内容,下面案例可供参考
3.1 通过查表的方法实现十六进制数转换为 ASCII 码。
题目要求
通过查表的方法实现十六进制数转换为 ASCII 码。
XLAT : DS:[BX+AL]为地址,提取存储器中的一个字节再送入AL
程序代码和运行结果
代码如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TABEL DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;建立一个表,将0-9的ascall值存入
DB 41H,42H,43H,44H,45H,46H ;这里是A-F的ascall
HEX DB 3DH ;定义一个内存空,存放一个十六进制
ASCLL_H DB 00H ;存放高位
ASCLL_L DB 00H ;存放低位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;查表指令的例子
;注意:BX寄存器指向表的首地址 AL中个存放的代查的码,即某一项与表的首地址的偏移量
MOV AL,HEX
AND AL,0FH ;取出低位
MOV BX,OFFSET TABEL ;查表
XLAT
MOV ASCLL_L,AL
MOV AL,HEX
AND AL,0F0H ;取出高位
SHR AL,4 ;右移四位
LEA BX,TABEL ;查表
XLAT ;查表之后的ascall值存放在AL寄存器中
MOV ASCLL_H,AL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
运行结果
3.2 通过查表的方法实现十六进制数转换为 ASCII 码。
题目要求
在3.1的基础上设计2个函数 HEX2ACSII 与DISPLAY_HEX
分别实现16进制到ACSII码的转换 以及打印转换后的ACSII码的功能,并利用上述函数将100-120的16进制数据进行打印
FUN_NAME PROC NEAR
……….
…………
RET
FUN_NAME ENDP
注意 (1)函数的输入与输出
(2)对函数中用到的寄存器进行保护
程序代码和运行结果
代码如下(示例):
; multi-segment executable file template.
data segment
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;