已知在字变量NUMBER中,存放着一个整数,编写程序,在屏幕上分别用二进制,八进制,十进制,十六进制输出。

只为记录汇编作业

题目:已知在字变量NUMBER中,存放着一个整数,编写程序,在屏幕上分别用二进制,八进制,十进制,十六进制输出。

代码:

DATA SEGMENT
    NUMBER DW 1234H
    ANS DB 20 DUP(0)   ;N进制转10进制的数组
    LEN DB 0           ;记录 N进制转10进制输出的 循环次数
    MSG1 DW "Binary number is:$"
    MSG2 DW "Octonary number is:$"
    MSG3 DW "Signed Decimal number is:$"
    MSG4 DW "Hexadecimal number is:$"
    CRLF DW 10,13,'$'  ;回车换行
DATA ENDS
CODE SEGMENT
    ASSUME  CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    
    ;输出二进制
    XOR BX,BX
    MOV BX,2       
    ;输出提示信息
    MOV DX,OFFSET MSG1
    MOV AH,9
    INT 21H         
    
    MOV AX,NUMBER 
    CALL PRINTF
    
    ;输出八进制
    XOR BX,BX
    MOV BX,8
    
    MOV DX,OFFSET MSG2
    MOV AH,9
    INT 21H  
    
    MOV AX,NUMBER   
    CALL PRINTF
    
    ;输出十进制
    XOR BX,BX
    MOV BX,10      
    
    MOV DX,OFFSET MSG3
    MOV AH,9
    INT 21H
    
    MOV AX,NUMBER
    CALL PRINTF
    
    ;输出十六进制
    XOR BX,BX
    MOV BX,16
         
    
    MOV DX,OFFSET MSG4 
    MOV AH,9
    INT 21H     
    
    MOV AX,NUMBER
    CALL PRINTF
    
    JMP OVER
;定义输出子程序
PRINTF PROC 
     MOV LEN,0
     MOV DI,OFFSET ANS
F:     
     XOR DX,DX      ;dx置零
     DIV BX         ;ax/bx   AX存的是商 DX存的是余数
     CMP DL,10      ;判断是否转换为A-F
     JAE AF         ;如果DL>=10 跳转到下面的AF函数
     ADD DL,30H     ;DL+30H 变成0-9  A-F 的ascll码,方便输出
CONTINUE:
     MOV [DI],DL    ;把DL 放入ANS数组中
     INC DI         ;DI+1
     INC LEN        ;len+1
     CMP AX,0       ;ax于0比较,判断是否被除尽
     JNE  F
     DEC DI
     JMP P     
     
AF:      
    SUB DL,10       
    ADD DL,'A'
    JMP CONTINUE
P:
    XOR CX,CX
    MOV CL,LEN      ;倒序输出ans数组里存的数据
L:    
    MOV DL,[DI]
    MOV AH,2
    INT 21H
    DEC DI
    LOOP L
            
    XOR CX,CX         ;ans数组初始化,加上更严谨,但是没必要
    MOV CL,LEN
    MOV DI,OFFSET ANS
E:    
    MOV [DI],0
    INC DI
    LOOP E
    
    MOV DX,OFFSET CRLF  ;回车换行
    MOV AH,9
    INT 21H        
       RET
PRINTF ENDP    
OVER:
    MOV AH,4CH     ;结束程序
    INT 21H
CODE ENDS
END START

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值