回 帖 发 新 帖 刷新版面

主题:请教如果在AX中的内容是1356

请教
如果在AX中的内容是1356
用程序怎么使屏幕上显示出4950
说明:4950是1356的十进制
我是个初学者
这个问题困扰了我了我一个星期了,我一直在苦想
哪位知道的朋友能不能告诉我一声,我会更加对汇编有兴趣的

回复列表 (共6个回复)

沙发

如果在AX中的内容是             1356H
用程序怎么使屏幕上显示出       4950D

现在这是一种算法:
我们首首先将(AX)里面的内容左移四位,将这四个二进制数转换为它的ASCII值
将它乘以一个16的3次方,后面的一样子这样子移位,就可以得到4950。

板凳

data segment
x dw 1356h
buf db ?
data ends
code segment
assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
    mov ax,x
    mov bx,10
    mov cx,0
    lea si,buf
lop1:    
    mov dx,0
    div bx
    push dx
    inc cx
    or ax,ax
    jne lop1
lop2:
    pop ax
    add al,30h
    mov [si],al
    inc si
    
    loop  lop2
    mov [si],byte ptr '$'
    lea dx,buf
    mov ah,09h
    int 21h

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

3 楼

这个是我写的程序,我试过了可以的。你可以试试看,这个程序的宗旨就是将十六进制数化成十进制显示出来。

4 楼

各个子程序在这里.转换一位或四位的都有:

;子程序名:HexToAscOne
;子程序功能:将AL中的一位十六进制(低四位)转换为ASC码
;入口: 要转换的数据在AL的低四位:
;出口:十六进制数的ASC码在AL中
;爱影响的寄存器: AL 和 Flags

HexToAscOne Proc Near
              AND       AL,0fh  ;清空AL的高四位
              CMP       AL,0ah ;如果大于或等于0aH(10),则直接加上48
              JC        done   ;如果小于0AH,则加上7后再加上48
              ADD       AL,7
              done:ADD       AL,30h
Ret
HexToAscOne ENDP ; 低四位转换完毕
Ret
HexToAscOne ENDP ; 低四位转换完毕


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


;子程序名:HexToAscTwo
;子程序功能:将AL中的两位十六进制转换为ASC码
;入口: 要转换的数据在AL中
;出口:高位的ASC码在AH中,低位的ASC码在AL中
;爱影响的寄存器: AX CX 和 Flags

HexToAscTwo Proc
PUSH CX    ;保护CX
MOV CH,AL  ;AL暂存CH中
MOV CL,4   
SHR AL,CL  ;通过逻辑右移,使AL的高4位转到低4位,同时高4位清0   
CALL HexToAscOne  ;调用HexToAscOne来完成高位转换
MOV AH,AL  ;高位ASC码存入AH中
MOV AL,CH  ;将CH重新转入AL中
CALL HexToAscOne  ;完成低位转换
POP CX
RET
HexToAscTwo ENDP

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,


;子程序名:HexToAscFour
;子程序功能:将AX中的四位十六进制转换为ASC码
;入口: 要转换的数据在AX中
;出口:由高到低ASC码依次存在:BH BL AH AL
;爱影响的寄存器: AX BX 和 Flags

HexToAscFour Proc
PUSH AX  ;暂存AX于堆栈中  
MOV AL,AH
CALL HexToAscTwo  ;完成高两位的转换
MOV BX,AX   ;将高两位的ASC码存入BX中
POP AX
CALL HexToAscTwo  ;完成低两位转换
RET
HexToAscFour ENDP

5 楼

虽然暂时不懂  还是顶!!

6 楼

不好意思搞错了.
我上面的那个显示出来的是十六进制的,十进制的我还在研究有没有好的算法
上面的注释有一点错.我改好了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册