汇编语言的一些小小的问题
发布网友
发布时间:2022-05-24 20:05
我来回答
共2个回答
热心网友
时间:2023-10-29 19:53
后面一条指令是DIV BX,说明你做的是16位除法,那么默认的被除数是[DX,AX],其中DX是被除数的高16位,AX是被除数的低16位,而实际上你的被除数只是存放在AX里面,那么被除数的高位应该要清零的,就比如说要你计算72/8,但是要求被除数必须是4位数,那么你的被除数是不是应该写成0072呢?
至于为什么会报错,那是因为如果没有清零那么DX中原来是有数据的,而且这个数比除数BX要大,结果溢出了(16位除法默认商存放在AX中,是16位寄存器,如果被除数的高16位比除数要大,那么商就会超过16位二进制数,用AX就存不下了,这个自己验证),你可以试试将DX设为1,2,或3等小于除数0AH的数据试试,都不会报错。
热心网友
时间:2023-10-29 19:54
感觉这函数有问题,cmp ax,0 ja out1 应该改成out2
这函数是这样转换的,循环把ax里的值除以10,直到ax里的值为0,每除一次保存dl里的值,然后再加上30h逐个显示它们。
这个DX不置零显示DIVIDE ERROR,肯定这时DX里不为零,然后除以10后,AX装不下结果导致的。