任务描述
本关任务:编写一个能进行混合四则运算的小程序。
编程要求
在寄存器AX
,BX
,CX
,DX
中分别存放了四个变量X,Y,V,Z的值,均为 16 位有符号数。此外,还有一个寄存器RSI
保存有变量W
的地址。
请编写汇编代码,计算W=(X∗Y−V)/Z的结果,并将商保存到W
位置处,将余数保存到W+2
位置处。
注意1:算式中的乘法运算不会超出16
位表示范围,减法运算不会得到负数结果。
注意2:由于使用的是不同于8086
的X86-64
汇编,因此内存寻址不再使用段址:偏移地址的形式,而是直接使用完整地址,比如:
mov ax,0xff
mov word ds:[si], ax ;不再使用这种形式
mov word [rsi], ax ;直接使用完整地址
上述代码中的rsi
为**64
位寄存器,si
可以看作是它的低16
位**,就像ax
和al
的关系。
输入数据由评测系统读取,并存放到指定寄存器中,程序运行结果也由评测系统读取并输出,学员只需要实现任务逻辑即可。
测试说明
平台会对你编写的代码进行测试:
测试输入:0050002000100015
预期输出:00790003
测试输入:0098003200560132
预期输出:001800AA
测试输入每四个字符代表一个十六进制数,分别对应要读取到AX
,BX
,CX
,DX
的值。
预期输出的前四个字符代表商的十六进制表示,后四个字符代表余数的十六进制表示。
Cal:
;在此处编写汇编代码实现功能
push dx
imul bx
sub ax,cx
pop cx
idiv cx
mov word[rsi],ax
mov word[rsi+2],dx
ret