Opecode ADD - HobbyOSs/opennask GitHub Wiki

結構複雑

符号拡張(ふごうかくちょう、Sign extension)とは、
符号付の数値を表現するビット列が格納領域のビット幅より短い場合に、
隙間を適切に埋めることによって数値としての同一性を維持する手法である。
0x04 ib		ADD AL, imm8		imm8をALに加算する
0x05 iw		ADD AX, imm16		imm16をAXに加算する
0x05 id		ADD EAX, imm32		imm32をEAXに加算する

0x80 /0 ib	ADD r/m8, imm8		imm8をr/m8に加算する
0x81 /0 iw	ADD r/m16, imm16	imm16をr/m16に加算する
0x81 /0 id	ADD r/m32, imm32	imm32をr/m32に加算する

0x83 /0 ib	ADD r/m16, imm8		符号拡張imm8をr/m16に加算する
0x83 /0 ib	ADD r/m32, imm8		符号拡張imm8をr/m32に加算する
0x00 /r		ADD r/m8, r8		r8をr/m8に加算する
0x01 /r		ADD r/m16, r16		r16をr/m16に加算する
0x01 /r		ADD r/m32, r32		r32をr/m32に加算する
0x02 /r		ADD r8, r/m8		r/m8をr8に加算する
0x03 /r		ADD r16, r/m16		r/m16をr16に加算する
0x03 /r		ADD r32, r/m32		r/m32をr32に加算する
putloop:
        MOV     AL,[SI]   ; 8a04      ;
        ADD     SI,1      ; 83c601    ; SIに1を足す