アセンブリテーマ:32ビットバイナリの加算を計算する
1593 ワード
プログラミング計算デジタル加算:341 ef 000 H+612010,000 H、キャリーは捨てることができません
ここでの命令はadcを用い,キャリーの加算演算を行うことができる.
最適化:実は次の3つの文は2つを合成することができて、adcが加算する時自動的にCFマークの位置を家に入れるためです.
adc ax,0 add ax,ds:[16]add ax,ds:[20]最適化後:
mov ax,ds:[16]adc ax,ds:[20]
assume cs:codesg
data segment
db 16 dup(0)
db 1eh,34h,0,0f0h ; :341ef000,
db 20h,61h,0,10h ; :61201000,
data ends
stack segment
db 100 dup(0)
stack ends
codesg segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,100
xor ax,ax
mov bx,0
mov bx,ds:[18]
add bx,ds:[22]
adc ax,0
add ax,ds:[16]
add ax,ds:[20]
mov ds:[0],ax
mov ds:[2],bx
mov ax,4c00h
int 21h
ここでの命令はadcを用い,キャリーの加算演算を行うことができる.
最適化:実は次の3つの文は2つを合成することができて、adcが加算する時自動的にCFマークの位置を家に入れるためです.
adc ax,0 add ax,ds:[16]add ax,ds:[20]最適化後:
mov ax,ds:[16]adc ax,ds:[20]