繁体   English   中英

x86程序集:比较DWORD变量

[英]x86 assembly: Compare DWORD variable

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

在屏幕上写内容没问题,但是我不能写一个大于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

您想要的是将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM