首页 > 解决方案 > 在 16 位汇编中将 ASCII 字符显示为数字

问题描述

我正在尝试编写一个程序来获得 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 获得的输出:在此处输入图像描述

我是一个完整的初学者,对汇编语言知之甚少,所以我希望有一个简单的解决方案/解释。上面的代码是我找到的不同程序的组合,它确实有效。

标签: assemblyx86-16masmdosbox

解决方案


推荐阅读