在下面的代码中,我试图将值推送到二进制,然后显示为二进制代码。由于某种原因,代码似乎只显示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
答案 0 :(得分:1)
这里有一些指示可以帮助你上路。
MOV COUNT,5
指令放在数据之间,因此可能是出现故障的原因。
每次使用DIV N2
时,除以50,因为 N2 被定义为一个字符。 Best还使用TWO db 2
当你想比较你已经通过宏调用CURSOR 39,22
第二次使用DIV N2
AX寄存器不再包含可用值,因为宏调用DISP N0
和DISP N1
已将数字09h放入AH寄存器。
要成功执行4个分区的级联,您必须保留每个前一个分区的商,然后将其用作以下分区的分红。见下面的例子。
使用DISP N0
显示" 0"我认为你需要跳过指令DISP N1
,因为现在你得到了两个" 01"。
问题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