Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在16位汇编中将ASCII字符显示为数字_Assembly_X86 16_Masm_Dosbox - Fatal编程技术网

Assembly 在16位汇编中将ASCII字符显示为数字

Assembly 在16位汇编中将ASCII字符显示为数字,assembly,x86-16,masm,dosbox,Assembly,X86 16,Masm,Dosbox,我正试图写一个程序,得到3个值的和,并得到平均值。到目前为止,我能够通过从总和中减去某个值得到总和的前导数字来“正确”地得到总和。从总和中减去27h/29可能不是最有效的方法。我知道这可能不是最佳解决方案,但使用除法会给我带来一些错误,并显示一些随机符号,正如我在转换为注释的块上看到的那样 TITLE Add (sum.asm) ; This program adds 8-bit values .model small .stack 100h .data ThreeBytes d

我正试图写一个程序,得到3个值的和,并得到平均值。到目前为止,我能够通过从总和中减去某个值得到总和的前导数字来“正确”地得到总和。从总和中减去27h/29可能不是最有效的方法。我知道这可能不是最佳解决方案,但使用除法会给我带来一些错误,并显示一些随机符号,正如我在转换为注释的块上看到的那样

TITLE Add       (sum.asm)

; This program adds 8-bit values

.model small
.stack 100h
.data
ThreeBytes db 10h, 20h, 30h   ;expected sum is 60h or 96d
message db 0ah, 0dh,"Sum = "
TheSum db ?, 0ah, 0dh, "$"


.code
main PROC
   mov  ax, @data
   mov  ds, ax
   mov  al, ThreeBytes
   add  al, ThreeBytes + 1
   add  al, ThreeBytes + 2
   ;sub al, 40  
   
   ; mov ch, 0
   ; mov ch, al
   ; mov bl, 10
   ; div bl
   
   sub al, 27h ;or 39d to get 9
   mov  TheSum, al ;output is ' (apostrophe) = 60h or 96d

   mov  dx, offset message
   mov  ah, 9

   
   int 21h
   mov ax, 4C00h
   int 21h

main endp
end main
以下是我从DOSBox获得的输出:


我是一个完全的初学者,对汇编语言几乎一无所知,所以我希望有一个简单的解决方案/解释。上面的代码是我发现的不同程序的组合,它确实起到了一定的作用。

如果你
mov-ah,0
首先将你的AL中的数字扩展到AX中,你的
div应该可以工作。显然,除非你已经知道答案应该是什么,或者如果你重复减法来实现除法,否则单靠减法是行不通的。除了如何进行零扩展,它又是一个复制品。归零后,你的数字将被输入AX,准备好使用答案中的16位数字部分。@Peter非常感谢你!我很抱歉多次发布此消息。我真的很感谢你的帮助。我将尝试学习更多关于汇编的知识,以便将您的建议应用到我的程序中。我认为关键是理解将数字转换为十进制数字字符串的算法。(每次重复除以10得到最低有效数字)。然后,您可以使用8086的指令来实现它,或者查看如何为其他人编写的实现创建合适的输入。您将知道它的哪些部分是重要的,并且可以看到它是如何工作的。当您知道代码片段的工作方式/原因时,组合代码片段会容易得多,因此请花时间理解一段打印代码,然后您就会知道如何使用它。