这程序,实现了:100001 除以 100。
在 data segment 之下,DD 伪指令,就在第0字节~第3字节,存放了32位数 100001,低字节在前。
当把 data 送到 DS 之后,DS:[0] ~ DS:[3],即为 100001。
DS:[0] ~ DS:[1],即为 100001 的低 16 位数;
DS:[2] ~ DS:[3],即为 100001 的高 16 位数。
同理,还有两个 DW 伪指令,作用如下:
DS:[4] ~ DS:[5],即为16 位数的 100。
DS:[6] ~ DS:[7],即为16 位数的 0。
你想一下,一个32位的数据.如果除以0.那么没意义,也异常了,除以1,结果还是32位,如果除以2,结果就只有16位了,只需要一个16位寄存器就可以放下结果.这是前提.
以上除法是32位除法,除法div后有word前缀指明除数是32位.由于寄存器是16位,所以只好将32位中的高16位放到dx里面去,低16位放在ax里面,然后商在ax里面.余数在dx里面.
ds数据段
ds: [0]=100001%65536
ds:[2]=100001/65536
ds:[4]=100
ds:[6]=0