Leơnh XLAT

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

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’...

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

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

(95 trang)
w