主题:[讨论]一道算术题目(用汇编写)
zhudeliliang
[专家分:0] 发布于 2007-05-31 22:33:00
试编写一程序计算以下表达式的值。
w=(v-(x*y+z-540))/x
式中x、y、z、v均为有符号字数据。
设x、y、z、v的值存放在字变量X、Y、Z、V中,结果存放在双字变量W之中。
////////////////////////////////////////////////////////////////////
我在x*y后有进位,不知道怎么写,
回复列表 (共3个回复)
沙发
塞北江南 [专家分:1350] 发布于 2007-06-01 10:04:00
.model small
.stack
.data
x sword 10
y sword -20
z sword 1000
v sword 3000
w dd ?
.code
.startup
;w=(v-(x*y+z-540))/x
mov ax,x
imul y ;x*y
add ax,z ; x*y+z
adc dx,0
sub ax,540 ;x*y+z-540
sbb dx,0
mov bx,v ;32位减法被减数的低16位v放在BX中
or bx,bx
.if sign?
mov cx,0ffffh
.else
mov cx,0 ;32位减法被减数的高16位放在CX中
.endif
sub bx,ax ;低16位减法
sbb cx,dx ;高16位减法
mov dx,cx ;差的高16位在DX中
mov ax,bx ;差的低16位在AX中
idiv x ;(v-(x*y+z-540))/x
mov word ptr w,ax ;商在W的低2字节
mov word ptr w[2],dx ;余数在高2字节
.exit 0
end
E:\all_soft\WinMasm1.02>debug f17.exe
-d
0B6C:0000 BA 70 0B 8E DA 8C D3 2B-DA D1 E3 D1 E3 D1 E3 D1 .p.....+........
0B6C:0010 E3 FA 8E D2 03 E3 FB A1-0A 00 F7 2E 0C 00 03 06 ................
0B6C:0020 0E 00 83 D2 00 2D 1C 02-83 DA 00 8B 1E 10 00 B9 .....-..........
0B6C:0030 00 00 2B D8 1B CA 8B D1-8B C3 F7 3E 0A 00 A3 12 ..+........>....
0B6C:0040 00 89 16 14 00 B8 00 4C-CD 21 0A 00 EC FF E8 03 .......L.!......
0B6C:0050 B8 0B [color=FF0000]00 00 00 00 [/color]43 E8-08 0A 73 C5 AC 2E 88 07 ......C...s.....
0B6C:0060 43 EB BE 4E 2E 89 36 4C-91 2E C6 07 00 2E 89 1E C..N..6L........
0B6C:0070 5B 91 26 8B 1D 8D 36 5F-91 2E 80 3C 2F 74 36 2E [.&...6_...</t6.
-g
Program terminated normally
-d 0b6c:0
0B6C:0000 BA 70 0B 8E DA 8C D3 2B-DA D1 E3 D1 E3 D1 E3 D1 .p.....+........
0B6C:0010 E3 FA 8E D2 03 E3 FB A1-0A 00 F7 2E 0C 00 03 06 ................
0B6C:0020 0E 00 83 D2 00 2D 1C 02-83 DA 00 8B 1E 10 00 B9 .....-..........
0B6C:0030 00 00 2B D8 1B CA 8B D1-8B C3 F7 3E 0A 00 A3 12 ..+........>....
0B6C:0040 00 89 16 14 00 B8 00 4C-CD 21 0A 00 EC FF E8 03 .......L.!......
0B6C:0050 B8 0B [u]12 01 00 00 [/u]43 E8-08 0A 73 C5 AC 2E 88 07 ......C...s.....
0B6C:0060 43 EB BE 4E 2E 89 36 4C-91 2E C6 07 00 2E 89 1E C..N..6L........
0B6C:0070 5B 91 26 8B 1D 8D 36 5F-91 2E 80 3C 2F 74 36 2E [.&...6_...</t6.
板凳
zhudeliliang [专家分:0] 发布于 2007-06-04 21:15:00
.if sign?
mov cx,0ffffh
.else
mov cx,0 ;32位减法被减数的高16位放在CX中
这里好象是判断V是负数还是正数吧?
如果是负数,怎么要将高位置为0ffffh呢?
3 楼
塞北江南 [专家分:1350] 发布于 2007-06-05 13:22:00
数据在内存是补码表示的,若为负数,则高位应该是全1表示真值的全0
我来回复