Mở roơng dâu cụa sô bị chia

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

DIV BX OVERFLOW

6.4 Mở roơng dâu cụa sô bị chia

Phépchiavớitoánháng từ

Trongphépchiavớitoánháng từ,sô bịchiaphạiđaịt tređnDX:AX ngaycạ khisôbịchiacótheơđaịttređnAX.Trongtrườnghợpnày,caănphạisửasốnnhư sau

• ĐôivớileơnhDIV,DXphạibịxoá

• ĐôivớileơnhIDIV,DXphạiđượcmởroơngdâucụaAX.LeơnhCWD(Convert WordtoDoubleword)sẽthựchieơnvieơcnày.

Vídú:Chia-1250cho7

MOV AX,-1250 ;AX=-1250

CWD ;mởroơngdâucụaAXvào DX MOV BX,7 ;BX=7

IDIV BX ;chiaDX:AXchoBX ,kêtqụatređnAX,sôdư ;tređnDX

Phépchiavớitoánhángbyte

Trongphépchiavớitoánháng byte,sô bịchiaphạiđaịt tređn AX ngaycạ khisôbịchiacótheơđaịttređnAL.Trongtrườnghợpnày,caănphạisửasốnnhư sau

• ĐôivớileơnhDIV,AHphạibịxoá

• ĐôivớileơnhIDIV,AHphạiđượcmởroơngdâucụaAL.LeơnhCBW(Convert Byte toDoublebyte)sẽthựchieơnvieơcnày.

Vídú:Chiamoơtsôcódâutrongbiên byte XBYTE cho-7 MOV AL,XBYTE ;ALgiữ sôbịchia

CBW ;mởroơngdâucụaALvào AH MOV BL,-7 ;BX=-7

IDIV BL ;chiaAXchoBL ,kêtqụatređnAL,sôdư ;tređnAH

Khođng có cờ nào bị ạnh hưởng bởi leơnh CWD và CBW .

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

6.5 Thụtúc nhaơp xuâtsô thaơpphađn

MaịcdùtrongPCtâtcạsô lieơuđượcbieêu dieêndướidángbinary.Nhưng vieơcbieêudieêndướidángthaơpphađnsẽthuaơntieơnhơnchongườidùng .Trongphaăn nàychúngtasẽviêtcácthụtúcnhaơpxuâtsôthaơpphađn.

Khinhaơpsôlieơu,nêuchúngtagõ21543chẳnghánthìthựcchâtlàchúngta gõvàomoơtchuoêikýtự,beđntrongPC,chúngđượcbiênđoơithành cácgiátrịnhị phađntươngđương cụa21543.Ngượcláikhixuâtsôlieơu,noơidungnhịphađncụa thanhghihoaịc vịtrínhớ phạiđượcbiênđoơithànhmoơtchuoêikýtựbieêudieênmoơtsô thaơpphađntrướckhichúngđượcinra.

Xuâtsôthaơpphađn(DecimalOutput)

ChúngtasẽviêtmoơtthụtúcOUTDECđeơin noơidungcụathanhghiAXnhư làmoơtsônguyeđnthaơpphađncódâu.NêuAX>0,OUTDECsẽinnoơidungcụaAX dướidángthaơp phađn.NêuAX<0,OUTDECsẽ indâutrừ (-),thayAX=-AX (đoơi thànbsôdương)roăiinsôdươngnàysaudâutrừ (-).Nhưvaơylàtrongcạ2trường hợp,OUTDECsẽingiátrịthaơpphađntươngđươngcụamoơtsôdương.Sauđađylà thuaơt toán :

AlgorithmforDecimalOutput

1. IF AX<0 /AXholdoutputvalue/ 2.THEN

3.PRINTaminussign

4.ReplaceAXby itstwo’scomplement 5.END_IF

6.Get thedigits inAX’sdecimalrepresentation 7.Convertthesedigitstocharacters andprintthem.

Đeơhieơuchitiêtbước6 caănphạilàmvieơcgì,chúngtagiạsửraỉng noơidung cụaAXlàmoơtsô thaơpphađn,vídú24618thaơpphađn.Cótheơlâycácdigits thaơp phađncụa24618baỉngcáchchialaịpláicho10dtheothụtúcnhư sau:

Divide 24618by10.Qoutient=2461,remainder=8 Divide 2461by10.Qoutient=246,remainder=1 Divide 246by10.Qoutient=24,remainder=6 Divide 24 by10.Qoutient=2,remainder=4 Divide 2by10.Qoutient=0,remainder=2

Cácdigitsthuđượcbaỉngcáchlâycác sôdưtheotraơttựngượclái. Bước7cụathuaơttoáncótheơthực hieơnbaỉngvòngFORnhưsau:

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

FORcounttimesDO

popadigitfromthestack convertittoacharacter outputthecharacter END_FOR

Codechothụtúc OUTDECnhưsau: OUTDEC PROC

;Print AX as asigneddecimalinteger ;input:AX

;output:none

PUSH AX ;saveregisters PUSH BX

PUSH CX PUSH DX

;IF AX<0

OR AX,AX ;AX<0? JGE @END_IF1 ;NO,AX>0 ;THEN

PUSH AX ;saveAX MOV DL,’-’;GET‘-’ MOV AH,2

INT 21H ;print ‘-’ POP AX ;get AX back NEG AX ;AX=-AX @END_IF1:

;getdecimaldigits

XOR CX,CX ;clearCXforcountsdigit MOV BX,10d ;BXhasdivisor

@REPEAT1:

XOR DX,DX ;clearDX

DIV BX ;AX:BX;AX=qoutient ,DX= remainder

PUSH DX ;pushremainderontostack INC CX ;incrementcount

;until

OR AX,AX ;qoutient=0? JNE @REPEAT1 ;nokeepgoing ;convertdigitstocharactersandprint

MOV AH,2 ; printcharacterfunction

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

;forcounttimesdo @PRINT_LOOP:

POP DX ;digitsinDL

OR DL,30h ;convertdigittocharacter INT 21H ;printdigit

LOOP @PRINT_LOOP ;end_for

POP DX ;restoreregisters POP CX

POP BX POP AX RET

OUTDEC ENDP

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

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

(95 trang)
w