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。你会得到从右到左的数字 请说明您是如何尝试的,错误是什么。请将其转换为十六进制字符串,然后打印出来。有什么问题吗?您的尝试在哪里?请说明您尝试了什么,以及您的错误是什么。转换为十六进制字符串,打印它。有什么问题吗?你的尝试在哪里?