此二进制输出代码无法正常工作 - 汇编语言

时间:2015-06-23 01:58:18

标签: assembly x86 x86-16

在下面的代码中,我试图将值推送到二进制,然后显示为二进制代码。由于某种原因,代码似乎只显示1111而不是正确分割并显示计数中每个十进制数的相应二进制代码。有什么建议吗?

CURSOR  MACRO Col, Row
    MOV AH,02
    MOV BH,00
    MOV DL,Col
    MOV DH,Row
    INT 10H
  ENDM

DISP   MACRO MES
    MOV AH,09
    MOV DX,OFFSET MES
    INT 21H

.DATA
.
.
.

N1              DB      '1','$'  
N2              DB      '2','$'
N3              DB      '3','$'
N4              DB      '4','$'
N5              DB      '5','$'
N6              DB      '6','$'
N7              DB      '7','$'
N8              DB      '8','$'
N9              DB      '9','$'
COUNT           DB      0


.
.
.code
. 
.
.
.
MOV COUNT,5
.
.
BINARY: MOV AL,COUNT; 22,39 38 37 36
        CBW
        DIV TWO

        CURSOR 36,22
        CMP AH,0
        JE ZERO
        JNE ONE
ZERO:   DISP N0
        jmp x
ONE:    DISP N1
x:      
        CBW         
        DIV TWO

        CURSOR 35,22
        CMP AH,0
        JE ZERO1
        JNE ONE1
ZERO1:   DISP N0
        jmp x1
ONE1:    DISP N1
x1:      
        CBW         
        DIV TWO

        CURSOR 34,22
        CMP AH,0
        JE ZERO2
        JNE ONE2
ZERO2:   DISP N0
        jmp x2
ONE2:    DISP N1
x2:      
        CBW         
        DIV TWO

        CURSOR 33,22
        CMP AH,0
        JE ZERO3
        JNE ONE3
ZERO3:   DISP N0
        jmp x3
ONE3:    DISP N1
x3:      
        JMP L0

2 个答案:

答案 0 :(得分:1)

这里有一些指示可以帮助你上路。

  1. MOV COUNT,5指令放在数据之间,因此可能是出现故障的原因。

  2. 每次使用DIV N2时,除以50,因为 N2 被定义为一个字符。 Best还使用TWO db 2

  3. 定义了数字2
  4. 当你想比较你已经通过宏调用CURSOR 39,22

  5. 销毁AH寄存器的除法的余数时
  6. 第二次使用DIV N2 AX寄存器不再包含可用值,因为宏调用DISP N0DISP N1已将数字09h放入AH寄存器。

  7. 要成功执行4个分区的级联,您必须保留每个前一个分区的商,然后将其用作以下分区的分红。见下面的例子。

  8. 使用DISP N0显示" 0"我认为你需要跳过指令DISP N1,因为现在你得到了两个" 01"。

  9. 问题3和4的简单解决方案是至少在两个宏中保存AX寄存器。

    CURSOR  MACRO Col, Row
    push ax
    MOV AH,02
    MOV BH,00
    MOV DL,Col
    MOV DH,Row
    INT 10H
    pop ax
    ENDM
    
    DISP   MACRO MES
    push ax
    MOV AH,09
    MOV DX,OFFSET MES
    INT 21H
    pop ax
    ENDM
    

    级联的解决方案(每个部门重复):

    BINARY: MOV AL,COUNT; 22,39 38 37 36
            CBW
            DIV TWO
            push ax     ;Save the quotient in AL
            CURSOR 39,22
            CMP AH,0
            JE ZERO
            JNE ONE
    ZERO:   DISP N0
            jmp x
    ONE:    DISP N1
    x:      pop ax      ;Restore the quotient in AL
            cbw         ;Extent before byte division
            DIV TWO
    

答案 1 :(得分:0)

    CURSOR  MACRO Col, Row
push ax
MOV AH,02
MOV BH,00
MOV DL,Col
MOV DH,Row
INT 10H
pop ax
ENDM

DISP   MACRO MES
push ax
MOV AH,09
MOV DX,OFFSET MES
INT 21H
pop ax
ENDM


.DATA
.
.
.

N1              DB      '1','$'  
N2              DB      '2','$'
N3              DB      '3','$'
N4              DB      '4','$'
N5              DB      '5','$'
N6              DB      '6','$'
N7              DB      '7','$'
N8              DB      '8','$'
N9              DB      '9','$'
COUNT           DB      0
TWO             DB      2
STR1            DB      4 DUP('$')

.
.
.code
. 
.
.
.
MOV COUNT,5
.
.
BINARY: MOV AL,COUNT; 22,39 38 37 36
        CBW
        DIV TWO
        push ax     ;Save the quotient in AL
        CURSOR 36,22
        CMP AH,0
        JE ZERO
        JNE ONE
ZERO:   DISP N0
        jmp x
ONE:    DISP N1
x:      pop ax      ;Restore the quotient in AL
        CBW         ;Extent before byte division
        DIV TWO
        push ax     ;Save the quotient in AL
        CURSOR 35,22
        CMP AH,0
        JE ZERO1
        JNE ONE1
ZERO1:   DISP N0
        jmp x1
ONE1:    DISP N1
x1:      pop ax      ;Restore the quotient in AL
        CBW         ;Extent before byte division
        DIV TWO
        push ax     ;Save the quotient in AL
        CURSOR 34,22
        CMP AH,0
        JE ZERO2
        JNE ONE2
ZERO2:   DISP N0
        jmp x2
ONE2:    DISP N1
x2:      pop ax      ;Restore the quotient in AL
        CBW         ;Extent before byte division
        DIV TWO
        push ax     ;Save the quotient in AL
        CURSOR 33,22
        CMP AH,0
        JE ZERO3
        JNE ONE3
ZERO3:   DISP N0
        jmp x3
ONE3:    DISP N1
x3:      pop ax      ;Restore the quotient in AL
        JMP L0
相关问题