汇编寄存器比较(8086)

时间:2014-03-03 04:30:25

标签: assembly compare ascii x86-16

我是汇编和创建程序的新手,该程序在AX寄存器中取值F43A,并将其转换为十进制的ascii字符串。

例如,AX = 8EFFh会打印出-28929。 (将2s补码转换为ascii)

我无法理解寄存器。我是否必须先将AX寄存器转换为十进制,或者暗示如果AX = 000Ah为十六进制AX也等于十进制10。

也是如此

mov AX,000Ah
cmp AX,10

工作?

任何帮助将不胜感激。我们将使用权限递减算法,该算法将基于AX的十进制值。虽然AX的输入值为十六进制。

如果这不起作用,我如何从AX中获取小数值?

2 个答案:

答案 0 :(得分:1)

CPU从根本上只知道二进制文件。汇编程序,编译器或反汇编程序仅提供便利实用程序来帮助在更高抽象级别输入或输出数据(例如分组为十六进制数字或小数,有符号或无符号,浮点和指令cmp ax, 10)。

cmp ax, 10和某些cmp ax, 0x0acmp ax, $acmp ax, 000ah都编码为同一条指令:xx 0a

你的任务确实是使用指令只知道“数字”将16位数字(例如8EFF)分成它的组件(长度为1..5的数​​组)并使用ASCII转换输出它。

在实施降低功率算法时,请注意8086 DIV instructions使用寄存器对DX:AX作为输入。

答案 1 :(得分:0)

您可以通过除以10的相反顺序得到数字,然后余数是最后一位数,然后再除以10,余数是倒数第二位,......

或者你可以除以10,000,商是第一个数字,除非它是零。然后将余数除以1000,商是下一个数字,......