-1

このコードは、シフト演算を使用して次を計算することになっています:p / 4 + v / 8

Data Segment
Db p
Db v
Db q
Data ends
Code Segment
Assume cs:code,ds:data
Start: mov ax,p
       Shr ax,01
Mov cl,02
Shr ax,cl
Mov bx,ax
Mov ax,v
Shr ax,01
Mov cl,03
Shr ax,cl
Mov dx,q
add bx
Mov q,ax
Code ends
end

私の主な質問は次のとおりです。私にとっては、p / 8 + v / 16?!!! 1を計算しているようです。これは、不要なシフト演算が2つあると思うからです。

4

1 に答える 1

1

あなたが言ったように、そのコードスニペットはp / 8 + v/16を計算します。

1ビットを右にシフトするたびに、2で整数除算を行っているようになります。

したがって、p / 8 + v / 16を取得するには、両方の場所からSHR ax、01を削除する必要があります。

于 2011-04-29T17:15:58.863 に答える