【发布时间】:2014-09-15 00:08:04
【问题描述】:
我需要在 tasm 上编写需要输入的汇编程序:一个 8 位二进制数,输出应该是:相同数字的十六进制表示。 例子: 10010110 -> 96 10110100->B4 由于我是组装新手,我不知道从哪里开始解决这类问题。
编辑: 以下是我对程序结构的基本想法:
.MODEL SMALL
.STACK 100H
.DATA
PROMPT_1 DB 'Enter the binary number : $'
PROMPT_2 DB 0DH,0AH,'The number of 1 bits is : $'
HEX_MAp DB '1,2,3,4,5,6,7,8,9,A,B,C,D,E,F'
HEXA DB ?
.CODE
MAIN PROC
MOV AX, @DATA ; initialize DS
MOV DS, AX
LEA DX, PROMPT_1 ; load and display PROMPT_1
MOV AH, 9
INT 21H
XOR BX, BX ; clear BX
MOV CX, 16 ; initialize loop counter
MOV AH, 1 ; set input function
/
好的,所以在我们加载包含二进制数的PROMT_1 变量后,我们需要将它分成 2 个半字节
(假设我们的输入始终是正确的 8 位输入)
我在谷歌上找到了一些指导,其中指出:
假设您已经在寄存器ah 中存储了一个二进制数,例如 10101100
mov al, ah
shr al, 4
所以我们在al 00001010
这是十六进制形式的第一个数字,如果小于10,则以十进制形式输出,否则输出字符(A,B,C,D,E,F)
接下来对其他4位数字做同样的事情
mov al, ah
shl al, 4
shr al, 4
所以我们在al 00001100
并输出结果
/
MOV AH, 4CH ; return control to DOS
INT 21H
MAIN ENDP
END MAIN
我在这里需要一些正确实现的指导(我真的还没有汇编语法,而且语言的逻辑对我来说也很不典型)
【问题讨论】:
-
您是否尝试过阅读或遵循任何有关 ASM 的教程? Q 是关于 ASM 还是关于将二进制转换为十六进制?如果是前者,那么您可以找到类似的答案。您仍然应该尝试向我们展示您的尝试。 stackoverflow.com/help/how-to-answer
-
是的,我正在开发一些关于代码可能是什么样子的基本概念(正如我之前所说,我还没有真正进入汇编)
-
@masss 程序应该如何接收输入?即,程序从哪里得到要转换的 8 位值?