8086汇编语言(16位)输入字类型十进制正整数(0-65535),输出16进制数

环境:MASM 2012.5

主要思路:将输入字符串转为单独的数值,通过循环累加得到字符串代表的值,随后通过移位和与运算得到每一位单独的16进制数并输出。

DATAS SEGMENT
    buf dw 6
        dw ?
        dw 6 dup(?)
    mulnum dw 10000,1000,100,10,1
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    lea dx,buf
    mov ah,0AH
    int 21H
    
    lea si,buf+1
    mov cx,[si]
    mov ch,0
    lea si,buf+2
    
change_num:                            ;将字符转为数字
    mov ax,[si]
    sub ax,30H
    mov [si],ax
    inc si
    loop change_num
    


    lea si,buf+1
    mov cx,[si]                        ;计数器重置
    mov ch,0    
    lea si,buf+2                    ;si指向字符串
    
    lea di,mulnum                    ;因输入位数不同对di进行操作
    add di,10
    mov al,cl
    mov bl,2
    mul bl
    sub di,ax                        ;使di指向相应位数对应的位置
    
    mov bx,0                        ;bx置零用于存累加结果
    mov ax,0
    
multi_num:                            ;乘法得到字符串代表的值
    
    push bx
    mov ax,[si]
    mov ah,0
    mov dx,0
    mov bx,[di]
    mul bx                            ;乘法结果存到dx中
    pop bx
    add bx,ax                        ;将乘法结果累加到bx中
    
    add si,1
    add di,2
    
    loop multi_num
    
shuchu:
;输出回车换行    
    mov dl,0DH
    mov ah,02H                                
    int 21H
    mov dl,0AH
    mov ah,02H                                
    int 21H
;输出第1个数字    
    mov cx,4
    mov ch,0
    mov dh,bh
    
    shr dh,cl                                ;得到高8位中的高位
    and dh,0FH
    
    cmp dh,09H
    jbe shuzi1
    ja  zimu1
shuzi1:
    add dh,30H
    jmp shuchu1
zimu1:    
    add dh,37H
    jmp shuchu1
    
shuchu1:
    mov dl,dh
    mov ah,02H                                ;输出高8位中的高位
    int 21H
;输出第2个数字        
    mov dh,bh
    and dh,0FH                                ;得到高8位中的低位

    cmp dh,09H
    jbe shuzi2
    ja  zimu2
shuzi2:
    add dh,30H
    jmp shuchu2
zimu2:    
    add dh,37H
    jmp shuchu2
    
shuchu2:
    mov dl,dh
    mov ah,02H                                ;输出高8位中的低位
    int 21H
;输出第3个数字    
    mov dl,bl
        
    shr dl,cl                                ;得到低8位中的高位
    and dl,0FH

    cmp dl,09H
    jbe shuzi3
    ja  zimu3
shuzi3:
    add dl,30H
    jmp shuchu3
zimu3:    
    add dl,37H
    jmp shuchu3
    
shuchu3:
    mov ah,02H                                ;输出低8位中的高位
    int 21H
;输出第4个数字    
    mov dl,bl
    and dl,0FH                                ;得到低8位中的低位

    cmp dl,09H
    jbe shuzi4
    ja  zimu4
shuzi4:
    add dl,30H
    jmp shuchu4
zimu4:    
    add dl,37H
    jmp shuchu4
    
shuchu4:

    mov ah,02H                                ;输出低8位中的低位
    int 21H
    
    mov dl,48H
    mov ah,02H                                
    int 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值