x86程序集:比较DWORD变量

时间:2015-03-28 07:57:04

标签: assembly x86

我有一个程序可以打开一些文件,读取它的内容,并在屏幕上输出它,以及它的长度(以字节为单位)。

在屏幕上写内容没问题,但是我不能写长度值大于655350,因为我有一个通用的程序,在打印前将dx:ax中存储的数字除以10它

我可以通过这种方式打印的最大数字是655350,因为在除以10之后,更大的值将不适合16位ax,并且会调用int 0h这是除零错误。

我想要做的是检查DWORD变量number中的数字是否大于655350,如果是,则输出“我不能写这么大的数字”这样的消息”。对于我的任务,我必须能够处理高达128KB的文件,但是如果有人试图加载ex,我想处理错误。 1GB文件。

这是我想做的某种伪代码:

filesiz dd ?

call getsize         ;using function 42h which moves pointer of file from beginning to end of file and returns size in bytes in dx:ax registers
mov word ptr[filesiz],ax
mov word ptr[filesiz]+2,dx

call printsize       ;here I want to check if in variable filesiz isn't number grater than 655350

注意:当然,我的程序可以打印的最大数量不是655350而是655359。在ax中除以10之后仍然是最大可能的数字65535并且在dx中是提醒9.但是答案已经解决了数字655350的问题。如果您想要655359的解决方案,只需先使用cmp dx,09h

即可

1 个答案:

答案 0 :(得分:2)

你想要的是比较DX:AX和以十六进制写的655350是0009FFF6h

call getsize
mov word ptr[filesiz],ax
mov word ptr[filesiz]+2,dx

cmp dx,0009h
ja  NOK
jb  OK
cmp ax,0FFF6h
ja  NOK
OK:
call printsize