📄 sy94.asm
字号:
data segment
value2 dw 4811
str db 4 dup (30h),13,10 ;定义一个str数组存放要输出的16进制字符串,后面加回车换行
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax ;装入段地址
;下面依据value2在内存中是以补码形式存放的特点,四位一组取出对应的十进制值给str
mov ax,value2 ;取出value2的值给ax
mov bx,offset str+4-1 ;取出str的第四个元素偏移地址给bx
mov cl,4 ;因为后面要右移四位,所以将4赋值给cl
again:
mov dx,ax ;后面要改变ax的值,所以先送入dx保存
and dl,0fh ;相与取出dx中的最低四位,即一个16进制数
mov byte ptr [bx],dl ;将取出的数送入str保存
shr ax,cl ;逻辑右移为下次取一个16进制数做准备
dec bx ;因为是从低位向高位取,bx减1,按照存储器的高高低低原则
cmp ax,00 ;判断ax是否为0,
jnz again ;不为0继续取有效位
;下面是将取到的每一位十进制数转化成对应十六进制数的ASCII码
mov bx,offset str ;取要转化的字符串的偏移地址
mov cx,4 ;对应四个16进制数的ASCII码
l:
mov dl,byte ptr [bx] ;取出一个对应的十进制数值给dl进行处理
cmp dl,0ah ;与10比较判断
jb next ;当小于10时转移到next
add dl,7h ;否则dl中的值加7
next:
add dl,30h ;给dl中的值加30h
mov byte ptr [bx],dl ;将得到的对应16进制数的ASCII码再送入str数组保存,为输出作准备
inc bx ;str的偏移地址加1
loop l ;cx不为0继续循环处理
;下面是真正输出value2对应的16进制字符串形式
mov cx,6
mov bx,offset str
pp:
mov dl,byte ptr [bx]
mov ah,2
int 21h
inc bx
loop pp
;输出结束,返回dos
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -