用mov ah,02h 输出12ABH 我会三种方式,想看看有没有大佬有更容易的方法
第一种:
data segment
BUF dw 12ABH ;定义数据
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,BUF ;传入显示的值
mov bx,ax ;把ax的值赋值给bx
mov bh,bl
mov cl,4
shr bh,cl
shl bl,cl
or bl,bh ;低八位中低四位和高四位互换
mov al,ah
mov cl,4
shr al,cl
shl ah,cl
or ah,al ;高八位低四位和高四位互换
mov bh,ah ;把互换结果传给bx的高八位
xchg bl,bh ;交换低八位和高八位
xor cx,cx ;cx置0
mov cl,4 ;循环次数
main:
mov dh,bl ;将al的内容传个dh
shr bx,1
shr bx,1
shr bx,1
shr bx,1 ;把ax逻辑右移4位
and dh,0fh ;dh高4位置0
add dh,30h ;先认为都是数字,全部都+30h
cmp dh,':' ;因为':'的ASCII码比9大1 而字母与数字的ASCII码中间隔了7个字符,所以判断这个
ja isLetter ;字母跳转
jb print ;不是字母
isLetter:
add dh,7h ;ASCII码+7变为字母
print:
mov dl,dh ; 把dh的值传给dl
mov dh,0 ;清空dh的值
mov ah,2 ;输出
int 21h ;执行功能
loop main ;继续下一次
mov ah,4ch ;退出程序
int 21h ;执行功能
code ends
end start
第二种:
data segment
BUF dw 12ABH ;定义数据
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,BUF ;传入显示的值
xor cx,cx ;cx置0
mov cl,4 ;入栈循环次数
main:
mov dh,bl ;将ax的低八位传个dh
shr bx,1
shr bx,1
shr bx,1
shr bx,1 ;把ax逻辑右移4位
and dh,0fh ;dh高4位置0
add dh,30h ;先认为都是数字,
cmp dh,':' ;':'ASCII的值比数字大,比字母小
ja isLetter ;字母
jb isNumber ;数字
isLetter:
add dh,7h ;ASCII码+7变为字母
isNumber:
push dx ;数据入栈
loop main ;数据循环入栈,直到cl=0
mov cl,4 ;出栈循环次数
print:
pop dx ;数据出栈
xchg dl,dh ;交换dl和dh的值
mov ah,2 ;输出
int 21h ;执行功能
loop print ;数据循环输出,直到cl=0
exit: ;退出程序
mov ah,4ch
int 21h
code ends
end start
第三种:
data segment
Temp db '0000','$'
BUF dw 12abh
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;正式代码开始
mov ax,BUF ;设置需要显示的AX的值
mov si,offset Temp+3;保存存储结果的字符串的最后一个字符偏移地址
xor cx,cx ;对cX清零
mov cl,4 ;设置循环次数为4次
MainPart:
mov dh,al ;将Al的内容传送给DH
shr ax,1
shr ax,1
shr ax,1
shr ax,1
;上述4句为使AX逻辑右移4位 理论上可以写成 shr AX ,cl(cl设置为4)
;但这个地方cl要记录循环次数每次循环会是cl-1所以无法满足正常的移位需要
and dh,0fh
add dh,30h
cmp dh,':' ;':'的ASCII比9大1 而字母的ASCII码与数字的ASCII码中间隔了7个其它字符
ja isLetter ;如果为字母则跳转
jb No ;如果不是
isLetter:
add dh,7h ;ASCII码加7变为字母
No:
mov [si],dh ;将字符存入,待存放内容的字符串的对应位置
dec si ;待存放内容的内存地址自减1
loop MainPart
print:
mov dx,offset Temp ;将带打印的字符串的偏移地址存放进dx中
mov ah,09
int 21h
mov al,0
mov ah,4ch
int 21h
code ends
end start
汇编输出12ABH三种方法
于 2019-11-22 17:27:39 首次发布