显示8个2位16进制值

逝庸 2017-12-25 11:29:26
data segment
array db 01H,25H,38H,62H,8DH,9AH,0BAH,0CEH
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data;
mov ds,ax;
mov si,offset array
mov cx,07H
s: mov dl,ds:[si]
call look
call look2
inc si
loop s

mov dl,ds:[si]
call look

mov ax,4c00H
int 21H

look:
push cx

mov ch,dl
mov cl,4
shr dl,cl
and dl,0FH

cmp dl,9
ja hex1 ;大于转移
add dl,30H
jmp t1

hex1:
sub dl,10
add dl,'A'


t1:
mov ah,02H
int 21H

and ch,0FH
cmp ch,9
ja hex2
add ch,30H
jmp t2

hex2:
sub ch,10

add ch,'A'

t2:
mov dl,ch
mov ah,02H
int 21H

mov dl,'H'
mov ah,02H
int 21H
pop cx
ret

look2:
mov dl,','
mov ah,02H
int 21H
ret
code ends
end start





我不明白为什么 alook:
push cx

mov ch,dl
mov cl,4
shr dl,cl
and dl,0FH

cmp dl,9
ja hex1 ;大于转移
add dl,30H
jmp t1
里的dl高四位要变成0101才能在
t2:
mov dl,ch
mov ah,02H
int 21H
里输出??
...全文
377 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2017-12-26
  • 打赏
  • 举报
回复
不是 0101 吧,而是 0011 及加的那个 30h 吧。这个,是单个的数值到显示的字符间的转换。
比如,数值 2,是 02H,要显示出来,就是字符 '2' 即 32H;0Ah-0Fh 要另外处理成 'A'-'F' 显示的样子。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧