汇编语言中16进制转ascii码需要左移四位还是右移四位

如题所述

从高位向低位的顺序转的话,用循环左移(ROL)。
从低位向高位的顺序转的话,用循环右移(ROR)。追问

为什么要移它呢?

追答

是要把每一个16进制位移到最低位,再通过与000FH相与将其取出,再将其值转为ASCii码

追问

不移动它,直接and. al. 0f0或者f0切换高低位不行吗?

追答

可以,这以后呢?还是要移动到最低位去。

code segment
assume cs:code
org 100h
start:
jmp bb
sr db 31H,32H,61H,41H,42H,03H,77H,81H,93H,55H
de db 1FH,20H,3DH,29H,2AH,03H,4DH,51H,5DH,37H
re db 10 dup(0)
; sr即source,re即result
; 你给出的比对结果存入de中,在程序的后半部分进行比对
; 程序在nasm中调试通过
x db 0
msg db 'equal',10,13,'$'

bb: push cs
pop ds
push cs
pop es

lea si,sr
lea di,re
mov cx,10
again1:
mov al,byte ptr[si]
mov x,al
rol x,4 ; 在masm中 应将本行变成4行 rol x,1
mov al,x
and al,0fh
mov ah,0
mov bl,10
mul bl
rol x,4 ; 在masm中 应将本行变成4行 rol x,1
mov bl,x
and bl,0fh
add al,bl
mov byte ptr[di],al
inc si
inc di
loop again1

mov cx,10
lea si,re
lea di,de
again2:
mov al,[si]
cmp al,[di]
jne again3
lea dx,msg
mov ah,9
int 21h
loop again2

again3:
mov ah,4ch
int 21h
code ends
end start

哦!这是10个bcd码数转16进制的程序,供参考。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-30
左移四位还是右移四位,都有可能。

要看你究竟要怎么转换。追问

为什么?

追答

不为什么。
跟据你的需要转换,即可。
你需要左转,就左转,你需要...

本回答被网友采纳
相似回答