x86 程序集:比较 DWORD 变量
x86 assembly: Compare DWORD variable
我有一个程序可以打开一些文件,读取它的内容,并在屏幕上输出它,连同它的字节长度。
在屏幕上写入内容没问题,但我不能写入大于 655350
的长度值,因为我有一个通用程序将存储在 dx:ax
中的数字除以 10在打印之前。
我可以这样打印的最大数字是655350
,因为更大的值除以10后将无法放入ax
的16位,并且会调用int 0h
是被零除错误。
我想做的是检查 DWORD 变量 number
中的数字是否大于 655350
,如果是,则输出类似 "I can't write such a large number" 的消息。对于我的任务,我必须能够处理最大 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
我有一个程序可以打开一些文件,读取它的内容,并在屏幕上输出它,连同它的字节长度。
在屏幕上写入内容没问题,但我不能写入大于 655350
的长度值,因为我有一个通用程序将存储在 dx:ax
中的数字除以 10在打印之前。
我可以这样打印的最大数字是655350
,因为更大的值除以10后将无法放入ax
的16位,并且会调用int 0h
是被零除错误。
我想做的是检查 DWORD 变量 number
中的数字是否大于 655350
,如果是,则输出类似 "I can't write such a large number" 的消息。对于我的任务,我必须能够处理最大 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