gpt4 book ai didi

assembly - 使用循环将十进制转换为二进制并显示它 - 汇编语言 EMU 8086

转载 作者:行者123 更新时间:2023-12-02 19:24:39 29 4
gpt4 key购买 nike

在下面的代码中,我尝试将 count 中的值转换为二进制,然后显示它。该代码似乎不起作用,并且在应该显示时仅显示 1,例如 1000 表示 8,但它为每个值显示一个。关于我应该改变或改进我的代码有什么建议吗?

我还尝试显示计数器,但在失败后放弃,并使用 N1N2 等来显示数字,而不是使用循环,这会使我的将代码缩短一英里并进行改进。也请给我建议:)

假设我想从 0 或 1 开始计数器,我想显示的值应该是 ascii 代码还是十六进制?例如,我想显示数字 5,然后显示数字 6。(示例将在第二个代码段中显示)。代码2有用吗?应该改变什么才能使其发挥作用?是否应该将 ascii 值放入 CX 中?我应该使用内存变量吗?

代码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

最佳答案

我测试了链接的代码。问题是从数字(“count”)转换为二进制(“str1”)的算法。我做了三处更改,corruptdna 必须替换代码中的下一个代码并运行它:

1. 向变量“str1”添加一个字节,以在末尾存储“$”并以 int 21h, ah=9 显示:

STR1            DB      5 DUP('$')

2. 更改了从数字(“count”)转换为二进制(“str1”)的算法。除法不是正确的方法,我右移了这些位,将每个提取的位转换为“0”或“1”并将这些字符存储在“str1”中:

BINARY: MOV SI,OFFSET STR1+3     ;POSITION OF THE LEAST SIGNIFICANT BIT (EXTREME RIGHT).
PUSH CX
MOV CL,4
MOV AL,COUNT
BINL1:
SHR AL, 1 ;PUSH BITS TO THE RIGHT. BIT 0 IN CARRY FLAG.
JC BIT_1 ;IF ( CARRY FLAG == 1 ) JUMP TO BIT_1.
MOV [ BYTE PTR SI ], '0' ;IF NO JUMP, BIT IS ZERO.
JMP NEXT_BIT ;SKIP "BIT_1".
BIT_1: MOV [ BYTE PTR SI ], '1'
NEXT_BIT:
DEC SI ;NEXT BIT POSITION IS TO THE LEFT.
DEC CL
JNZ BINL1
POP CX
JMP PRINTBINARY

3.最后显示“str1”(以“$”结尾):

PRINTBINARY:    CURSOR 36,22 ; 36,22 then 35,22 to 33,22
MOV AH, 9 ;SERVICE TO DISPLAY STRING '$' ENDED.
MOV DX, OFFSET STR1 ;STRING TO DISPLAY ('$' ENDED).
INT 21H
JMP L0

关于assembly - 使用循环将十进制转换为二进制并显示它 - 汇编语言 EMU 8086,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106109/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com