You are on page 1of 11

BI TP I

THIT K LU THUT TON V VIT CHNG TRNH

Bi 1:Bi tp thit k lu thut ton v vit chng trnh bng ngn ng


Assembly cho b vi x l APX86 thc hin chuyn d liu t vng nh c a ch
a n b ti vng nh c a ch u l c? a = 2E63E9; b = 2E8AEF; c =
4A0F5C3.
Bc 1: Tnh s byte cn chuyn nm trong vng nh t a n b
Do c a ch segment bng nhau nn a ch vt l l 8AEFh- 63E9h = 35567
25577 = 9990 byte cn chuyn.
Bc 2: Lp lu thut ton:
Bc 3: Vit chng trnh
;------------------------------------------------
;----------nh ngha cc hng s----------
;------------------------------------------------
SEGMENT_1 EQU 2Eh ; a ch segment 1 = 2E
OFFSET_1 EQU 63E9h ; a ch offset 1 = 63E9
SEGMENT_2 EQU A0h ; a ch segment 2 = 2E
OFFSET_2 EQU 8AEFh ; a ch offset 2 = 8AEF
;-------------------------------------------------
Code_Seg SEGMENT ; M mng lnh
ASSUME CS: Code_Seg, DS: Data_Seg, ES: Extra_Seg
ORG 100h ; To File dng COM
ThuTucChinh PROC ; Th tc chnh
CALL Chuyen_Mang ; Gi chng trnh con chuyn mng
ThuTucChinh EndP;
;--------------------------------------------------
Chuyen_Mang PROC NEAR
PUSH AX
PUSH CX
MOV SI,OFFSET_1 ; t a ch OFFSET_1 ca nh cn truy xut
; chuyn i vo SI
MOV DI, OFFSET_2 ; t a ch OFFSET_1 ca nh cn nhn d liu
; chuyn n vo DI
MOV AX, SEGMENT_1; Chuyn a ch SEGMENT_1 vo TG trung gian AX
MOV DS, AX ; Chuyn a ch SEGMENT vo thanh ghi mng d
; liu DS. Lc ny DS:SI tr ti vng s chuyn byte.
MOV AX, SEGMENT_2
MOV ES, AX ; ES:DI tr ti vng s chuyn byte ti
CLD ; Xa c DF. Sau khi xa DF = 0
MOV CX, 9990 ; B m 9990 byte
LOOP_TRANSFERBYTE:
MOVSB ; Lnh chuyn tng byte
LOOP: LOOP_TRANSFERBYTE: ; Lp li ti khi ht 9990 byte
POP CX
POP AX
RET
Chuyen_Mang ENDP
;------------------------------------------------
Code_Seg ENDS ; ng mng lnh
;------------------------------------------------
Data_Seg SEGMENT ; M mng d liu
BUFFER_SAVE DB 9990 DUP (?)
Data_Seg ENDS
END ThuTucChinh

Cu 3: Bi tp thit k lu thut ton v vit chng trnh bng ngn ng


Assembly cho b vi x l APX86 thc hin nhn hai s a vi b, kt qu a vo
vng nh c nhn l MEM1 v MEM2? Vi a =74358920; b= 5271

MEM1 DW 0 ; vng nh c nhn MEM1lu Byte cao nht ca kt qu

MEM2 DW 0 ; vng nh c nhn MEM2 lu Byte gia ca kt qu


MEM3 DW 0 ; vng nh c nhn MEM3 lu Byte thp ca kt qu

START:

push ax;

push bx;
push cx;

push dx;

push sp;

push di;

push bp;

push si;

mov ax,046eh; byte cao

mov bx,0a088h; byte thap

mov cx,1497h; so bi nhan

mul cx;

mov bp,ax; byte thap (cao) vao si

mov sp,dx; byte cao(cao) vao sp

mov ax,bx;

mul cx; nhan byte thap voi so bi nhan

mov di,ax; chuyen byte thap(thap) vao di

mov si,dx; chuyn byte cao(thap) vao ds

add bp,si; cong byte cao(thap)voi byte thap(cao),ket qua la:SP,BP,DI (5B 41CB
5038)

mov MEM1, SP ; MEM1 lu Byte cao ca kt qu

mov MEM2, BP ; MEM2 lu Byte gia ca kt qu

mov MEM3, DI ; MEM2 lu Byte thp ca kt qu

ret
Cu 4. Bi tp thit k lu thut ton v vit chng trnh bng ngn ng
Assembly cho b vi x l APX86 thc hin chia hai s a vi b, kt qu a vo
vng nh c nhn l MEM3? Vi a= 64285701; b = 875

Lu thut ton thc hin chia hai s liu


;cau 4: CHIA 2 S LIU: a CHO b

; KT QU LU VO VNG NH C NHN MEM1 V MEM2

; a= 64285701(3D4EC05); b = 36B

; MEM1 lu thng, MEM2 lu phn d

MEM1 DW 0 ; vng nh c nhn MEM1 lu thng ca php chia

MEM2 DW 0 ; vng nh c nhn MEM2 lu phn d ca php chia

START: ; gi ni dung cc thanh ghi vo ngn xp

PUSH AX ; gi ni dung thanh ghi AX vo ngn xp

PUSH BX ; gi ni dung thanh ghi BX vo ngn xp

PUSH DX ; gi ni dung thanh ghi DX vo ngn xp

MOV AX, 3D4E H ; a= (DX AX)= 64285701(3D4EC05 H)

MOV DX, C05H

MOV BX, 36B H ; b =857

DIV BX ; AX lu kt qu = (DX AX) / s b chia

DX lu phn d

MOV MEM1, AX ; MEM1 lu thng ca php chia

MOV MEM2, DX ; MEM2 lu phn d ca php chia

POP DX ; ly s liu trong ngn xp tr v cho DX

POP BX ; ly s liu trong ngn xp tr v cho BX

POP AX ; ly s liu trong ngn xp tr v cho AX

RET ; dng chng trnh

PHN II: VIT CHNG TRNH HON CHNH


Cu 5: Thc hin nhp vo t bn phm 2 k t trong phi c 1 k t l s,
1 k t l ch in thng?

.model small
.stack 100h
.Data
s db 10,13,'Nhap vao mot ki tu la so:$'
s1 db 10,13,'Ki tu vua nhap khong phai la so, moi ban nhap lai:$'
s2 db 10,13,'So ban vua nhap la:$'
s3 db 10,13,'Nhap vao mot chu in thuong:$'
s4 db 10,13,'Nhap sai, xin nhap lai:$'
s5 db 10,13,'Chu ban vua nhap:$'
.Code
Main Proc
Mov ax,@Data
Mov ds,ax
mai:
Mov ah,9
Lea dx,s
int 21h
Mov ah,1
Int 21h
jmp tiep
Nhaplaiso:
Mov ah,9
Lea dx,s1
int 21h
Mov ah,1
Int 21h
tiep:
cmp al,'0'
jb Nhaplaiso
cmp al,'9'
Ja Nhaplaiso
Mov bl,al
Mov ah,9
Lea dx,s2
Int 21h
Mov ah,2
Mov dl,bl
Int 21h
Xor bl,bl
Mov ah,9
Lea dx,s3
int 21h
Mov ah,1
Int 21h
jmp tiep1
Nhaplaichu:
Mov ah,9
Lea dx,s4
int 21h
Mov ah,1
Int 21h
tiep1:
cmp al,'a'
jb Nhaplaichu
cmp al,'z'
Ja Nhaplaichu
Mov bl,al
Mov ah,2
Mov ah,9
Lea dx,s5
Int 21h
Mov ah,2
Mov dl,bl
Int 21h
jmp mai
het:
Mov ah,4ch
Int 21h
End Main

Cu 6: Thc hin in dng biu din nh phn ca thanh ghi BX?

.Model Small
.Stack 100
.Data
TBao DB 'Go vao 1 so hexa toi da la 16 bit:$ '
TBao2 DB 13,10,'bieu dien dang nhi phan cua so hexa nay la:$'
.Code
MAIN proc
MOV AX,@Data
MOV DS,AX
MOV AH,9
LEA DX,TBao
INT 21H
XOR BX,BX
MOV AH,1
TIEP:
INT 21H
CMP AL, 13
JE THOIDOC;
cmp al,'0'
jb CHU
cmp al,'9'
Ja CHU
AND AL,0FH;doi tu ma ascii sang so
DICH:
SHL BX, 4
OR BL, AL ; thm s mi c nhp vo
JMP TIEP
CHU:
SUB al,57h; i t m assci sang s h hexa.
JMP DICH
THOIDOC:
MOV AH,9
LEA DX,TBao2
INT 21H
MOV CX,16
MOV AH,2
HIEN:
XOR DL,DL
ROL BX, 1
MOV AH,2
ADC DL,30H;
INT 21H
LOOP HIEN
MOV AH,4CH
INT 21H
MAIN Endp
END MAIN

You might also like