アセンブリテーマ:32ビットバイナリの加算を計算する

1593 ワード

プログラミング計算デジタル加算:341 ef 000 H+612010,000 H、キャリーは捨てることができません
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]