Assembly 寄存器的打印值,组件x8086

Assembly 寄存器的打印值,组件x8086,assembly,x86,x86-16,Assembly,X86,X86 16,您好,我正在编写一个程序,我需要将寄存器的值打印到屏幕上。我想了几种方法,但都不管用。你知道怎么做吗?例如,ax=0abcdh。您必须将寄存器的值分成不同的部分 示例:十六进制输出: MOV CX, 4 next_digit: PUSH CX MOV CL, 4 ROL AX, CL PUSH AX AND AL, 0Fh ADD AL, '0' CMP AL, '9' JLE not_a_letter ADD AL, 'A'-'9'-1 not_a_le

您好,我正在编写一个程序,我需要将寄存器的值打印到屏幕上。我想了几种方法,但都不管用。你知道怎么做吗?例如,
ax
=0abcdh。

您必须将寄存器的值分成不同的部分

示例:十六进制输出:

  MOV CX, 4
next_digit:
  PUSH CX
  MOV CL, 4
  ROL AX, CL
  PUSH AX
  AND AL, 0Fh
  ADD AL, '0'
  CMP AL, '9'
  JLE not_a_letter
  ADD AL, 'A'-'9'-1
not_a_letter:
  ; Now write the character AL to the screen
  POP AX
  POP CX
  LOOP next_digit
此代码将销毁CX寄存器的内容,因此如果不想修改CX寄存器,则必须将其保存在堆栈上

行“现在将字符AL写入屏幕”取决于操作系统


如果您想要十进制输出,它就有点棘手了。您必须使用DIV指令并除以10。你会得到从右到左的数字

您必须将寄存器的值分成不同的部分

示例:十六进制输出:

  MOV CX, 4
next_digit:
  PUSH CX
  MOV CL, 4
  ROL AX, CL
  PUSH AX
  AND AL, 0Fh
  ADD AL, '0'
  CMP AL, '9'
  JLE not_a_letter
  ADD AL, 'A'-'9'-1
not_a_letter:
  ; Now write the character AL to the screen
  POP AX
  POP CX
  LOOP next_digit
此代码将销毁CX寄存器的内容,因此如果不想修改CX寄存器,则必须将其保存在堆栈上

行“现在将字符AL写入屏幕”取决于操作系统


如果您想要十进制输出,它就有点棘手了。您必须使用DIV指令并除以10。你会得到从右到左的数字

请说明您是如何尝试的,错误是什么。请将其转换为十六进制字符串,然后打印出来。有什么问题吗?您的尝试在哪里?请说明您尝试了什么,以及您的错误是什么。转换为十六进制字符串,打印它。有什么问题吗?你的尝试在哪里?