当前位置:编程学习 > 汇编语言 >>

高手帮忙改一下下面的汇编程序使其能执行,然后在此基础上将题目改为以8进制形式输出,写出程序!!!

TITLE 从键盘输入两位16进制数,输出其2进制数形式 data segment tt1 db 0h data ends stack segment para stack db 100 dup(?) stack ends code segment assume cs:code,ds:data,es:data,ss:stack sub1 proc far start: push ds mov ax,0 push ax mov ax,data mov ds,ax mov es,ax call sub4 mov cl,4 shl al,cl mov tt1,al call sub4 add al,tt1 mov cx,8 next: rol al,1 mov tt1,al and al,00000001 call sub2 mov al,ttl loop next ret SUB1 ENDP sub4 proc mov ah,1 int 21h cmp al,"9" ja qq1 sub al,30h jmp qq2 qq1: sub al,57h qq2: ret sub4 endp SUB2 PROC cmp al,9 ja g1 add al,"0" jmp g2 g1: add al,37h g2: mov dl,al mov ah,2 int 21h RET SUB2 ENDP code ends end start
答案:TITLE    从键盘输入两位16进制数,输出其2进制数形式
;==============================================
DISP_STR  MACRO  X     ;宏定义.
    MOV  DX, OFFSET X
    MOV  AH, 9
    INT  21H
ENDM
;----------------------------------------------
DATA  SEGMENT          ;数据段.
  MSG1 DB  13, 10, 'Please Input : $'
  MSG3 DB  13, 10, 'The BIN is : $'
    x  DB  ?            ;存放新输入数据.
DATA  ENDS
;----------------------------------------------
CODE   SEGMENT         ;代码段.
    ASSUME   CS: CODE, DS: DATA
START:
    MOV  AX, DATA
    MOV  DS, AX
;--------------------------------
    DISP_STR  MSG1     ;宏调用,提示 Please Input :
;--------------------------------
IN_LOOP:
    MOV  x,  0         ;数据清零.
    MOV  CH, 2
_INX:
    MOV  AH, 1         ;输入字符.
    INT  21H
;--------------------------------
    CMP  AL, '0'
    JB   _IN_END       ;小于'0',不是数字.
    CMP  AL, 3AH
    JB   SUB_30H       ;'0'~'9'.
    CMP  AL, 'A'
    JB   _IN_END       ;小于'A',不是数字.
    CMP  AL, 'G'
    JB   SUB_37H       ;'A'~'F'.
    JNB  _IN_END       ;全部数字结束.
;--------------------------------
SUB_37H:
    SUB  AL, 7
SUB_30H:
    SUB  AL, '0'
    MOV  CL, AL
    MOV  AL, x
    MOV  BL, 16        ;老数据乘以16
    MUL  BL
    ADD  AL, CL        ;加上新数据.
    MOV  x,  AL        ;保存.

    DEC  CH
    JNZ  _INX          ;继续输入.
;--------------------------------
_IN_END:
    DISP_STR  MSG3     ;宏调用,提示  The BIN is :
    MOV  AL, x
    MOV  CX, 8      ;显示8位数.
DDDD:
    MOV  DL, '0'    ;先计划显示0
    TEST AL, 80H    ;测试最高位.
    JZ   DDD1
    INC  DL         ;非0就显示1
DDD1:

    PUSH AX
    MOV  AH, 2      ;显示DL中的ASCII码.
    INT  21H
    POP  AX

    SHL  AL, 1      ;左移.
    LOOP DDDD       ;CX-1,非零转移.
;--------------------------------
    MOV  AH, 4CH
    INT  21H
;--------------------------------
CODE  ENDS
    END  START
;==============================================

上一个:汇编问题
下一个:51单片机怎么用按键设定延时(汇编)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,