Chương 6: LEƠNH NHAĐN VAØ CHIA

Một phần của tài liệu giáo trình hợp ngữ nâng cao (Trang 66 - 69)

Trongchương5chúngtađãnóiđên cácleơnhdịchmàchúngcótheơdùngđeơ nhađnvàchiavớiheơsô2.Trongchươngnàychúngtasẽnóiđêncácleơnhnhađnvà chiamoơtsô bâtkỳ.

khácnhau dođócó leơnhnhađncódâuvàleơnhnhađn khođngdâu.

Moơttrongnhữngứngdúngthườngdùngnhâtcụaleơnhnhađnvàchialà thực hieơncácthaotácnhaơpxuâtthaơpphađn.Trongchươngnàychúngtasẽviêtthụtúc chonhaơpxuâtthaơpphađnmàchúngđượcsửdúngnhieăutrongcáchốtđoơngxuât nhaơptừngốivi.

6.1 LeơnhMULvàIMUL

Nhađncódâuvànhađnkhođngdâu

Trongphépnhađn nhịphađn sôcódâuvàsôkhođngdâuphạiđượcphađnbieơt moơtcáchrõràng.Vídúchúngtamuônnhađnhaisô8bit 1000000và1111111. Trongdieêndịchkhođngdâu,chúnglà128và255.Tíchsôcụachúnglà32640= 0111111110000000b.Trongdieêndịchcódâu,chúnglà-128và-1.Dođótíchcụa chúnglà 128=0000000010000000b.

Vìnhađn có dâuvàkhođngdâu dănđêncáckêtqụakhácnhauneđncó 2leơnh nhađn:

MUL(multiply)nhađn khođngdâu IMUL(integermultiply)nhađncódâu

Cácleơnhnàynhađn2toánhángbytehoaịctừ.Nêu2toánhángbyteđượcnhađn vớinhauthìkêtqụalàmoơttừ16bit.Nêu2toánhángtừđượcnhađnvớinhauthìkêt qụalàmoơtdoubletừ32bit.Cúphápcụachúnglà:

MUL source ; IMUL source ;

Toánhángnguoănlàthanhghihoaịcvịtrínhớnhưngkhođngđượclàmoơthaỉng

Phépnhađnkieơubyte

Đôivớiphépnhađn màtoánhánglàkieơubytethì AX=AL*SOURCE ;

Phépnhađnkieơutừ

Đôivớiphépnhađn màtoánhánglàkieơutừ thì DX:AX=AX*SOURCE

Chương 6 : Leơnh nhađn và chia 69

Aûnhhưởngcụacácleơnhnhađnleđncáccờ.

SF,ZF,AF,PF:khođngxácđịnh

sauleơnhMUL CF/OF=0nêunửatređncụakêtqụa(DX)baỉng0 =1 trongcáctrườnghợpkhác

sauleơnhIMUL CF/OF=0nêu nửatređn cụakêtqụacóbitdâu giôngnhưbitdâucụanửathâp. =1trongcáctrườnghợpkhác

Sauđađychúngtasẽlâyvàivídú.

Vídú1:GiạsửraỉngAX=1và BX=FFFFh

INSTRUCTIONDecproduct HexProduct AH AL CF/OF

MUL BL 128 7F80 7F 80 1

IMULBL 128 0080 00 80 1

INSTRUCTIONDecproduct HexProduct DX AX CF/OF MUL CX 16776960 00FFFF00 00FF FF00 1 IMULCX -256 FFFFFF00 FFFF FF00 0 INSTRUCTIONDecproduct HexProduct DX AX CF/OF

MUL AX 16769025 00FFE001 00FF E001 1 IMULAX 16769025 00FFE001 00FF E001 1 INSTRUCTIONDecproduct HexProduct DX AX CF/OF

MUL BX 4294836225 FFFE0001 FFFE 0001 1

IMULBX 1 00000001 00000 0001 0

INSTRUCTION Decproduct HexProduct DX AX CF/OF MUL BX 65535 0000FFFF 0000 FFFF 0

dú 2 : GiạsửraỉngAX=FFFFhvàBX=FFFFh Ví

dú 3 : GiạsửraỉngAX=0FFFh Ví

dú 4 : GiạsửraỉngAX=0100hvàCX=FFFFh Ví

dú 5 : GiạsửraỉngAL=80hvàBL=FFh

Chương 6 : Leơnh nhađn và chia 70

6.2 Ưùng dúng đơn giạn cụa leơnh MUL và IMUL

Sauđađychúngtasẽ lâymoơtsôvídúminhhĩavieơcsửdúngleơnh MULvàIMULtrongchươngtrình.

dú 1:Chuyeơnđốnchươngtrìnhsautrongngođnngữ câpcao thành mã hợpngữ :A=5xA-12xB.GiạsửraỉngAvàBlà2biêntừvàkhođngxạyrasựtràn.

Code:

MOV AX,5 ;AX=5 IMUL A ;AX=5xA MOV A,AX ;A=5xA MOV AX,12 ;AX=12 IMULB ;AX=12xB SUB A,AX ;A=5xA-12xB

VíDú2:viêtthụtúcFACTORIALđeơtínhN!chomoơtsônguyeđndương.Thụ túcphạichứaNtređnCXvàtrạveăN!tređnAX.Giạsử khođngcótràn.

Giại: ĐịnhnghiãcụaN!là N!=1nêuN=1

=Nx(N-1)x(N-2)x...x1nêuN>1 ThuaơttoánđeơtínhN!nhưsau:

Product=1 Term =N FOR NtimesDO

Product=productxterm term=term-1 ENDFOR Code: FACTORIALPROC ;computesN! ;input:CX=N ;output:AX=N!

MOV AX,1 ;AX=1 MOV CX,N ;CX=N

TOP:

MUL CX ;Product=productxterm

LOOP TOP ; RET

FACTORIALENDP

Chương 6 : Leơnh nhađn và chia 71

6.3 Leơnh DIV và IDIV

Cũngnhư leơnhnhađn,có2leơnhchiaDIVvàIDIVchosôkhođngdâuvàchosô códâu.Cúphápcụachúnglà:

DIV divisor IDIV divisor

Toánhángbyte

Leơnhchiatoánhángbytesẽchiasôbịchia16bit(dividend)tređnAX chosôchia(divisor)là1byte.Divisorphạilà1thanhghi8bithoaịc1bytenhớ .

Thươngsô ởtređnALcònsôdưtređnAH.

Toánhángtừ

Leơnhchiatoánhángtừ sẽchiasôbịchia32bit(dividend)tređn DX:AXchosôchia(divisor)là1từ .Divisorphạilà1thanhghi16bithoaịc1từ nhớ . Thươngsô ởtređnAXcònsôdưtređnDX.

Aûnhhưởngcụacáccờ :cáccờcótrángtháikhođngxácđịnh.

DivideOverflow

Khithựchieơnphépchiakêtqụacótheơkhođngchứahêttređn ALhoaịcAX nêu sôchiabéhơnrâtnhieăuso vớisô bịchia.Trongtrườnghợpnàytređnmànhìnhsẽ xuât hieơnthođngbáo : “ Divide overflow”

Vídú1: Giạsử DX=0000h,AX=0005hvàBX=0002h Vídú1: Giạsử DX=0000h,AX=0005hvàBX=FFFEh Vídú3: Giạsử DX=FFFFh,AX=FFFBhvàBX=0002h

Chương 6 : Leơnh nhađn và chia 72

Instruction DecQuotient DecRemainder AX DX

IDIV BX -2 -1 FFFE FFFF

Một phần của tài liệu giáo trình hợp ngữ nâng cao (Trang 66 - 69)

Tải bản đầy đủ (DOCX)

(95 trang)
w