DIV BX OVERFLOW
Thuaơt toán
7.7 Leơnh XLAT
Trongmoơtsô ứngdúng caănphạichuyeơnsôlieơutừdángnàysang dángkhác.VídúIBMPCdùngASCIIcode chocáckýtựnhưngIBMMainframes dùngEBCDIC(ExtendedBinaryCodedDecimalInterchangeCode) .Đeơchuyeơn moơtchuoêikýtựđãđượcmãhoábaỉng ASCIIthànhEBCDIC,moơtchươngtrìnhphại thaymãASCIIcụatừngkýtựtrongchuoêithành mãEBCDICtươngứng.
LeơnhXLAT(khođngcótoánháng)đượcdùngđeơđoơimoơtgiátrịbytethành moơtgiátrịkhácchứa trongmoơtbạng.
ALphạichứabytecaănbiênđoơi
DXchứađiáchưoffsetcụabạngcaănbiênđoơi LeơnhXLATsẽ:
1)coơngnoơidungcụaALvớiđịachưtređnBXđeơtáorađiáchưtrongbạng 2)thaythêgiátrịcụaALvớigiátrịtìmthâytrongbạng
Vídú,giạsửraỉngnoơidungcụaALlàtrongvùng0đênFhvàchúngtamuôn thaynóbaỉngmãASCIIcụasôhextươngđươngnó,tứclàthay6hbaỉng036h=‘6’, thayBhbaỉng042h=“B”.Bạngbiênđoơilà:
TABLE DB 030h,031h,032h,033h,034h,035h,036h,037h,038h,039h DB 041h,042h,043h,044h,045h,046h
Vídú,đeơđoơi0Chthành“C”,chúngtathựchieơncácleơnhsau: MOV AL,0Ch ;sôcaănbiênđoơi
LEA BX,TABLE ;BXchưá điáchưoffsetcụabạng XLAT ;ALchứa“C”
ỞđađyXLATtínhTABLE+Ch=TABLE+12vàthaythêALbởi043h.NêuAL chứamoơtsôkhođngởtrongkhỏang0đên15thìXLATsẽchomoơtgiátrịsai.
Vídú:Mãhoávàgiạimãmoơtthođngđieơpmaơt Chươngtrìnhnàysẽ:
Nhaĩcnhởngườidùngnhaơpvàomoơtthođngđieơp Mãhoánódướidángkhođngnhaơnbiêtđược, Inchúngraởdòngtiêptheo
Dịchchúngtrởláidángbanđaăuroăiinchúngởdòngtiêp theo Khicháyctmànhìnhsẽcódángsau:
ENTERAMESSAGE: DAIHOCDALAT ;input OXCBUCOXEXK ;encode DAIHOCDALAT ;translated Thuaơttoánnhưsau:
Printprompt
Readandencodemessage Goto anewline
Printencodedmessage gotoanewline
translateandprintmessage
TITLEPGM7_5:SECRETMESSAGE .MODEL SMALL .STACK 100H .DATA ;ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ CODE_KEY DB 65 DUP(’‘),‘ XQPOGHZBCADEIJUVFMNKLRSTWY’
DB 37DUP(‘‘) ;128 kýtựcụabạngmãASCII CODED DB 80dup(‘$’);80kýtựđượcgõvào
DECODE_KEY DB65DUP(‘‘), ‘JHIKLQEFMNTURSDCBVWXOPYAZG’
DB 37 DUP(‘‘)
PROMPT DB ‘ENTERAMESSAGE:’,0DH,0AH,’$’ CRLF DB 0DH,0AH,’$’ .CODE MAIN PROC MOV AX,@DATA MOV DS,AX ;indâunhaĩc MOV AH,9 LEA DX,PROMPT INT 21H ;đĩcvàmãhoákýtự MOV AH,1
LEA BX,CODE_KEY ;BXchưtớiCODE_KEY
LEA DI,CODED ;DIchưtớithođngđieơpđãmãhoá
Chương 7: Mạng và các chê đoơ địa chư 98 WHILE_:
INT 21h ;đĩckýtự vàoAL CMP AL,0DH ;cóphạilàkýtựCR
JE ENDWHILE ;đúng,đênphaăninthođngđieơpđãmãhoá XLAT ;mãhoákýtự
MOV [DI],AL ;cât kýtự trongCODE JMP WHILE_ ;xửlýkýtựtiêptheo ;xuônghàng
MOV AH,9 LEA DX,CRLF INT 21H
;inthođngđieơp đãmãhoá LEA DX,CODED INT 21H
;xuônghàng
LEA DX,CRLF INT 21H
;giạimãthođngđieơpvàinnó MOV AH,2
LEA BX,DECODE_KEY ;BXchứađiáchưbạnggiại mã LEA SI,CODED ;SIchưtới thođngđieơpđãmãhoá WHILE1:
MOV AL,[SI] ;lâykýtựtừthođngđieơpđãmãhoá CMP AL.’$’ ;cóphạicuôithođngđieơp
JE ENDWHILE1 ;kêtthúc
XLAT ;giạimã
MOV DL,AL ;đaịtký tựvào DL INT 21H ;inkýtự INC SI ;SI=SI+1 JMP WHILE1 ;tiêptúc ENDWHILE1: MOV AH,4CH INT 21H MAIN ENDP END MAIN
Trongchươngtrìnhcóđĩansôlieơuvớicáckhaibáosau:
; ALPHABET ABCDEFGHIJKLMNOPQRSTUVWXYZ
ChobiêtbạngchữacáitiêngAnh
Chương 7: Mạng và các chê đoơ địa chư 99
DB 37 DUP (‘ ‘)
Khaibáo 128 kýtựcụabạngmãASCII,trongđóthứtựcáckýtựhoalàtuỳý.
CODED DB 80 dup (‘$’)
80kýtựđượcgõvào,giátrịbanđaăulà$ đeơcótheơinbaỉnghàm9ngaĩt21h
DECODE_KEY DB 65 DUP (‘ ‘), ‘JHIKLQEFMNTURSDCBVWXOPYAZG’ DB 37 DUP (‘ ‘)
Bạnggiạimãđượcthiêtlaơptheocáchmãhoá , nghĩalàtrongphaănmãhoáchúngta đãmãhoá‘A’ thành‘X’vìvaơy khigiạimã ‘X’phạigiại mãthành‘A’...