【问题标题】:Displaying the ASCII-Code of a char in assembly [duplicate]在程序集中显示字符的 ASCII 码 [重复]
【发布时间】:2021-10-18 19:38:31
【问题描述】:

我对汇编有点陌生,我想知道如何获取 char ASCII 码并打印出该 ASCII 码。我正在使用 MASM (Dosbox)。

MOV AX, 'A'  ; -> I want to print out the ASCII code of 'A'

感谢您的回答!

【问题讨论】:

  • 您的意思是要打印65?只需将AX 打印为数字即可。除以 10,打印两位数。
  • @Jester 喜欢这样吗?: MOV AX, 'A' MOV BX, 10 DIV BL MOV AH, 2 INT 21h
  • 您需要处理这两个数字并且必须转换回文本(添加'0')。
  • DIV 后:ADD AH, 48 ADD AL, 48?
  • stackoverflow.com/questions/45904075/…了解如何解决这个问题。

标签: assembly ascii x86-16 masm dosbox


【解决方案1】:

来自 cmets

MOV AX, 'A'MOV BX, 10DIV BLMOV AH, 2INT 21h

这个字节大小的除法将在AL 中留下一个商,在AH 中留下一个余数。
但是 DOS.PrintCharacter 函数 02h 需要在 DL 寄存器中输入。

DIV后:ADD AH, 48ADD AL, 48

可以转换,但您可以使用 ADD AX, 3030h 一次性完成

我得到了这个输出:##

尝试下一个代码:

mov ax, 'A'
mov bl, 10
div bl
add ax, 3030h
mov dx, ax      ; Moving tens "6" to DL for printing and preserving the units in DH
mov ah, 02h     ; DOS.PrintCharacter
int 21h
mov dl, dh      ; units "5"
mov ah, 02h     ; DOS.PrintCharacter
int 21h

Displaying numbers with DOS 详细解释了如何处理更大的数字。

【讨论】:

  • 首先将mov ah, 02h clobbers ah 加载到dl 中。更好:mov dx, axmov dl, dh
  • 我尝试了代码,但得到了这个输出:##65。问题是我为什么会得到这个:##
  • @daniel19 这些## 必须来自您程序中的之前的某事。我贴的代码 sn-p 不能自己输出那些多余的字符。为什么不编辑问题并包含整个程序源代码?
猜你喜欢
  • 1970-01-01
  • 2021-04-02
  • 2012-05-04
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多