【发布时间】:2015-09-15 08:26:04
【问题描述】:
在下面的代码中,我试图将计数中的值转换为二进制,然后显示它。该代码似乎不起作用,并且仅在应该显示 1000 时才显示 8,而是为每个值显示一个。关于我应该更改或改进代码的任何建议?
我也尝试显示一个计数器,但在失败后放弃了,我使用N1、N2 等来显示数字,而不是使用循环,这会使我的代码缩短一英里并改进它。也请给我建议:)
假设我想从 0 或 1 开始计数器,我想显示的值应该是 ascii 代码还是十六进制?例如,我想显示数字 5,然后显示 6。(示例将显示在第二个代码段中)。代码 2 会起作用吗?应该改变什么才能使其工作?是否应将 ascii 值放入 CX?我应该改用内存变量吗?
CODE 2 注意:2个点代表代码省略,如果您对代码理解不正确,请询问。请不要介意这些问题,我仍然是编码的业余爱好者,并且很难做最简单的事情。谢谢阅读 :) 以下是整个程序的代码,供需要的人使用:Full Code Here
代码 1:
OUT1 MACRO COUNT ;new macro added, edit date 7th july
MOV CL,COUNT
MOV AL,CL
MOV DX,0378H
OUT DX,AL
ENDM
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
.
.
N0 DB '0','$'
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('$') ; ADDED NEW
COL1 DB 36 ; ADDED NEW
.
.
.code
.
MOV COUNT,5
.
.
BINARY: LEA SI,STR1
PUSH CX
MOV CL,4
BINL1: MOV AL,COUNT
CBW
DIV TWO
MOV BYTE PTR[SI],AH
INC SI
DEC CL
JNZ BINL1
POP CX
JMP PRINTBINARY
PRINTBINARY: MOV AH, BYTE PTR[SI]
PUSH CX
PUSH AX
MOV CL,4
PBIN1: CURSOR COL1,22 ; 36,22 then 35,22 to 33,22
CMP AH,0
JE ZERO
JNE ONE
ZERO: DISP N0
JMP X
ONE: DISP N1
x: DEC SI
DEC CL
JNZ PBIN1
POP AX
POP CX
JMP L0
代码 2:
mov cx,5
disp cx
inc cx
disp cx
【问题讨论】:
标签: assembly binary emulation x86-16