Assembly so sánh 2 xâu kí tự năm 2024

Contents 1; (asembly) Hiển thị lời chào Tiếng Anh và Tiếng Việt trên emu8086 ............................................... 8

Show

2: (asembly) Nhập 1 ký tự và xuất ra màn hình trên emu8086 .............................................................. 9

  1. (asembly) nhập kí tự thường và chuyển sang kí tự hoa trên emu8086 ............................................ 11
  2. (asembly) Nhập một chuỗi và in ra trên emu8086 ........................................................................... 12
  3. (asembly) Nhập chuỗi thành chuỗi thường và chuỗi hoa trên emu8086 ......................................... 13
  4. (asembly) IN CHUỖI ĐẢO NGƯỢC trên emu8086 ....................................................................... 15
  5. (asembly) in chuỗi đảo ngược khi điền dấu # trên emu8086 ........................................................... 16
  6. (asembly) Tìm giá trị lớn nhất của mảng ........................................................................................ 17
  7. (asembly) Đếm chiều dài 1 chuỗi trên emu8086 .......................................................................... 18
  8. (asembly) Nhập vào một số và tính giai thừa của số đó trên emu8086 .......................................... 20
  9. (asembly) Chuyển một số từ hệ 10 sang hệ 2 trên emu8086 ........................................................ 21
  10. (asembly) Chuyển một số từ hệ 10 sang hệ 16 trên emu8086 ...................................................... 23

12ỔNG CÁC CHỮ SỐ ..................................................................................................................... 25

13, BCNN: ................................................................................................................................ 27

14ổng chia hết cho 7:.......................................................................................................................... 30

15ổng 2 số kiểu word ........................................................................................................................ 33

Kiến thức : Cấu trúc chương trình dạng EXE:* .Model .Stack 100h .Data .Code PROC

Endp

HUY INIT

END

Cấu trúc bài làm đi thi : ;nhap chuoi truoc , in thong bao và in chuoi sau .model small .stack 100 .data tb1 DB 10,13, &

039;nhap chuoi: $&

039; tb2 DB 10,13, &

039;chuoi da nhap la: $&

039;;10 xuong dong , 13 lui dau dong*

str DB 100 dup(&

039;$&

039;) ; .code main proc mov ax, @data mov ds,ax ;khoi tao thanh ghi ds

mov ah,9 ;in mot xau ky tu lea dx,tb1 ; int 21h ;in ra

;nhap chuoi ky tu mov ah,10 ; 10=0ah lea dx,str ; tro den dia chi dau str int 21h

mov ah,9 ;in mot xau ky tu lea dx,tb2 ; int 21h ;in ra

call xuatchuoi

mov ah,4CH int 21h main endp xuatchuoi proc

HUY INIT

nhập vào một phím

Ngắt loại 2

Hiện một kí tự lên màn hình

AH = 2

Hiện một ký tự có mã ASCII là giá trị của DL lên màn hình

MOV AH, 2;

MOV DL, 30h; (30h là mã ASCII của ‘0’) INT 21H; => màn hình sẽ in ra ký tự ‘0’

Ngắt loại 9

Hiện xâu ký tự

AH = 9

Hiện xâu ký tự có địa chỉ lệch là giá trị của DX

tb BD ‘co lam thi moi co an$’; MOV AH, 9; LEA DX, tb; INT 21H; => màn hình in ra xâu tb (ko hiện ký tự ‘$’) Ngắt chương trình

Dừng chương trình

AH = 4

CH

Dừng chương trình

MOV AH,

4CH

Hàm 0Ah AH=

Nhập một xâu kí tự vào một biến đệm cho trước trong chương trình, biến này phải được chỉ bởi cặp thanh ghi DS:DXà biến đệm phải có dạng như sau: -Byte 0: chứa số kí tự tối đa của xâu nhập vào -Byte 1: chứa một trị không (= 0) -Byte 2, byte 3, byte 4, ... chứa một trị rỗng (để trống), để chứa các kí tự sẽ được nhập vào sau này (khi chương trình thực hiện).

Để có được một biến như trên chương trình phải khai báo biến (tên biến là Xau_Nhap) như sau: Xau_Nhap DB 256, 0, 256 Dup (‘ ‘) Như vậy Xau_Nhap là một biến kiểu byte, gồm 258 byte. Byte đầu tiên (byte) chứa trị 256, byte 1 chứa trị 0, 256 byte tiếp theo chứa kí tự trống, được sử

HUY INIT

dụng để chứa các kí tự sẽ được nhập sau này. Xau_Nhap chứa tối đa 256 kí tự. Cũng có thể sử dụng hàm 0Ah/21h để nhập một xâu kí tự vào vùng nhớ có địa chỉ xác định trong bô nhớ. Sử dụng: Vào: Ah = 0Ah DS:DX = <Địa chỉ Segment:Offset của xâu nhập> Ra: DS:DX không thay đổi Biến đệm bây giờ có dạng như sau:

  • Byte 0: không thay đổi
  • Byte 1: chứa tổng số kí tự đã được nhập vào
  • Byte 2, byte 3, byte 4, ... chứa các kí tự đã được nhập vào. V椃Ā dụ 1: Với khai báo biến đệm Xau_Nhap như trên, nếu sau này chương trình nhập vào xâu: “Tin hoc” thì://
  • Byte 0: vẫn chứa số 256
  • Byte 1: chứa giá trị 7, đó chính là 7 kí tự trong xâu “Tin hoc”
  • Từ byte 2 đến 8 chứa lần lượt các kí tự trong xâu “Tin hoc. scribd/doc/50996286/M%E1%BB%98T- S%E1%BB%90-CH%E1%BB%A8C-N%C4%82NG- C%E1%BB%A6A-NG%E1%BA%AET-21H

1

  • Mov [Toán hạng đích], [Toán hạng nguồn] Tác dụng: Lấy nội dung (giá trị) của [Toán hạng nguồn] đặt vào [Toán hạng đích]. Nội dung của [Toán hạng nguồn] không bị thay đổi.
  • Inc/ADD/DEC/SUB
  • Inc [Toán hạng đích]
  • Add [Toán hạng đích],[Toán hạng nguồn]
  • Dec [Toán hạng đích]
  • Sub [Toán hạng đích],[Toán hạng nguồn] Lệnh Inc (Increment): làm tăng giá trị của [Toán hạng đích] lên 1 đơn vị. Lệnh Dec (Decrement): làm giảm giá trị của [Toán hạng đích] xuống 1 đơn vị. Lệnh Add (Addition): lấy giá trị/nội dung của [Toán hạng nguồn] cộng vào giá trị/nội dung của [Toán hạng đích], kết quả này đặt vào lại [Toán hạng đích].

HUY INIT

ngược lại thì : SI ← SI – 2

  1. Lệnh LEA (LoadEffectiveAddress) C甃Ā pháp: LEA [Toán hạng đích],[Toán hạng nguồn] Trong đ漃Ā: [Toán hạng đích]: Là các thanh ghi 16 bít. [Toán hạng nguồn]: Là địa chỉ của một v甃ng nhớ hay tên của một biến. Tác dụng: Lệnh LEA có tác dụng chuyển địa chỉ offset của [Toán hạng nguồn] vào [Toán hạng đích]. Lệnh này thường được sử dụng để lấy địa chỉ offset của một biến đã được khai báo trong chương trình. Thanh ghi được sử dụng trong trường hợp này là thanh ghi cơ sở (BX) và thanh ghi chỉ mục (SI và DI).
  2. Lệnh Mul và Div
  3. Mul [Toán hạng nguồn]
  4. IMul [Toán hạng nguồn]
  5. Div [Toán hạng nguồn]
  6. IDiv [Toán hạng nguồn] Tác dụng:
  7. Lệnh Mul (Multiply): Thực hiện ph攃Āp nhân trên số không dấu. AX=ALnguồn 8bit. Nếu nguồn là 16bit thì kết quả lưu vào DX AX =AXnguồn 16bit. Phần thấp ở AX, phần cao ở DX.
  8. Lệnh IMul (Interger Multiply): tương tự như MUL nhưng là số có dấu. DIV : Chức năng: Thực hiện ph攃Āp chia trên số không dấu. Nếu [Toán hạng nguồn] là toán hạng 8 bít thì lệnh sẽ lấy giá trị của thanh ghi Ax (số bị chia) chia cho [Toán hạng nguồn] (số chia), kết quả thương số chứa trong thanh ghi Al, số dư chứa trong thanh ghi Ah.

Nếu [Toán hạng nguồn] là toán hạng 16 bít thì lệnh sẽ lấy giá trị của cặp thanh ghi Dx:Ax (số bị chia) chia cho [Toán hạng nguồn] (số chia), kết quả thương số chứa trong thanh ghi Ax, số dư chứa trong thanh ghi Dx.

Nếu ph攃Āp chia cho 0 xảy ra hay thương số vượt quá giới hạn của thanh

HUY INIT

ghi AL (chia 8 bít) hay Ax (chia 16 bít) thì CPU sẽ phát sinh lỗi “Divice overflow”.

  1. Lệnh logic: NOT – AND – OR – XOR – TEST C甃Ā pháp:
  2. Not [Toán hạng đích]
  3. And [Toán hạng đích], [Toán hạng nguồn]
  4. Or [Toán hạng đích], [Toán hạng nguồn]
  5. Xor [Toán hạng đích], [Toán hạng nguồn]
  6. Test [Toán hạng đích], [Toán hạng nguồn] Lệnh TEST : tương tự lệnh AND nhưng không ghi kết quả nó chỉ ảnh hưởng đến các cờ CF,OF,ZF
  7. Lệnh dịch bit SHL: dịch trái bit ảnh hưởng đến cờ SHR: dịch phải bit ảnh hưởng đến cờ SAL: Dịch trái (quay) SAR: Dịch phải(quay) RCR: quay phải. RCL: quay trái.
  8. Lệnh CMP C甃Ā pháp: Cmp [Toán hạng đích], [Toán hạng nguồn]
  9. Tác dụng: Lệnh Cmp (Compare) được sử dụng để so sánh giá trị/nội dung của [Toán hạng đích] so với [Toán hạng nguồn]. Tương tự như lệnh Sub, nó lấy [Toán hạng đích] trừ đi [Toán hạng nguồn] nhưng kết quả không làm thay đổi [Toán hạng đích] mà chỉ làm thay đổi giá trị của một số cờ hiệu: CF, ZF, OF,...

Asembly, bai tap assembly, assembly,emu8086, lập trình hợp ngữ , kien truc may tinh, ktvxl, vi xu li, kien truc vi xu li

1; (asembly) Hiển thị lời chào Tiếng Anh và Tiếng Việt trên emu ;in 2 chuoi .Model Small ; chung trinh nay chon bo nho small .Stack 100 ; kich thuoc ngan xep la 100 bytes .Data ;cac dong duoi data la khai bao CRLF DB 13, 10, &

039;$&

039; ;ki tu xuong dong

HUY INIT

TBao1 db "Hay nhap mot ky tu: $" ;khoi tao xau

TBao2 db 13,10,"Ky tu da nhap: $"

output db? ;khoi tao bien KyTu khong co gia tri ban dau*

.code main proc

Mov ax,@data ;khoi dau thanh ghi DS

Mov ds,ax ;tro thanh ghi ds ve dau doan data

;in ra man hinh xau TBao

Lea dx, TBao1 ;dua con tro toi dia chi cua TBao

Mov ah, 9 ;su dung ham ngat 9 cua ngat INT 21h

int 21h ;nhap vao 1 ki tu tu ban phim *

Mov ah, 1 ;su dung ham ngat 1 cua ngat INT 21h

Int 21h Mov output, al;gan gia tri vua nhap (duoc luu o AL) vao bien KyTu

;in ra man hinh xau TBao

lea dx, TBao

mov ah, 9

HUY INIT

int 21h

;hien thi ky tu da nhap

Mov ah, 2 ;su dung ham ngat 2 cua ngat INT 21h

Mov dl, output ;Hien thi ra man hinh ky tu da luu o DL Int 21h

;ve dos

Mov ah, 4Ch

Int 21h

main endp

End

  1. (asembly) nhập kí tự thường và chuyển sang kí tự hoa trên emu

;nhap ky tu truoc sau do in chuoi và ky tu hoa sau .MODEL SMALL

.STACK 100h

.DATA

tb2 DB 13,10,&

039;Chuyen sang ki tu hoa la : $&

039;

Char DB ?,&

039;$&

039; .CODE Main PROC

MOV AX,@DATA

HUY INIT

.code main proc mov ax, @data mov ds,ax ;khoi tao thanh ghi ds

;nhap chuoi ky tu mov ah,10 ; 10=0ah lea dx,str ; tro den dia chi dau str int 21h

mov ah,9 ;in mot xau ky tu lea dx,tb1 ; int 21h ;in ra

;dua dx chi ve phan tu thu 2 cua mang la ; ky tu dau tien duoc nhap vao lea dx,str +2 ;256,5,h,e,l,l,o int 21h ;in na

mov ah,4CH int 21h main endp end

  1. (asembly) Nhập chuỗi thành chuỗi thường và chuỗi hoa trên emu .Model Small .Stack 100h .Data str DB 256 dup(&

    039;$&

    039;) ;khoi tao chuoi str tb1 DB 10, 13, &

    039;Chuyen sang chuoi in thuong: $&

    039; tb2 DB 10, 13, &

    039;Chuyen sang chuoi in hoa: $&

    039; .Code main proc MOV AX, @Data MOV DS, AX ;khoi tao thanh ghi ds

HUY INIT

;Nhap chuoi: LEA DX, str ;tro den dia chi chuoi str MOV AH, 10 ; nhap xau ngat 10 INT 21H

;In thong bao 1 MOV AH, 9 LEA DX, tb1 ;hien xau tb INT 21H CALL inthuong ;hien xau str chu thuong

;In chuoi in hoa: MOV AH, 9 LEA DX, tb2 ;hien thong bao tb INT 21H CALL inhoa

MOV AH, 4ch INT 21H

main endp

inthuong proc LEA SI, str+2 ; Lap1: ;1 xau : kiem tra tung ky tu mot MOV DL, [SI] CMP DL, &

039;A&

039; ;compare JL In1 ;jump less CMP DL, &

039;Z&

039; ;compare JG In1 ;jump greater ADD DL, 32 ;chuyen ky tu hoa thanh thuong In1: MOV AH, 2 ;in ky tu INT 21H INC SI ;increase CMP [SI], &

039;$&

039; ;compare JNE Lap1 ;jump not equal

HUY INIT

int 21h

;in chuoi tb2 ra man hinh lea dx, tb mov ah, int 21h

;vd 123456789 =>len=9 256,9,1,2,3.... mov cl,[str + 1] ;chuyen chieu dai chuoi vua nhap vao cl lea si,[str + 2] ;dua si chi ve phan tu thu 2 cua mang la ky tu dau tien duoc nhap vao Lap:;day cac ky tu vao ngan xep push [si];dua phan tu ma si dang chi den vao dau ngan xep inc si ;increase :tang gi tri cua si len 1 loop Lap

mov cl, [str + 1];chuyen chieu dai chuoi vua nhap vao cl Lap2: ;lay du lieu tu ngan xep pop dx ;lay gia tri tren dinh ngan xep dua vao dx mov ah,2 ;in ki tu vua lay ra man hinh int 21h Loop Lap

; tro ve DOS dùng hàm 4 CH cua INT 21H MOV AH, 4CH INT 21H main endp end

  1. (asembly) in chuỗi đảo ngược khi điền dấu # trên emu

;enter là 13 , esc là 27 .Model small .Stack 100h .Data str db 50 dup (&

039;$&

039;) ; khoi tao chuoi 50 bytes .code

HUY INIT

main proc mov ax,@Data mov ds,ax ;khoi tao thanh ghi ds mov cx,0;gan gia tri cho thanh ghi cx= START: inc cx;increase tang cx len 1 mov ah,1 ;nhap 1 ki tu int 21h cmp al,&

039;#&

039;;so sanh al voi ki tu # => enter la 13 je end ;jump equal :nhay den &

039;end&

039; neu bang push ax ; them phan tu vao ngan xep jmp START;nhay k dieu kien

end:;ket thuc mov ah,2 ;in ky tu mov dl,0; in dau cach int 21h

dec cx;decrease:tru cx di 1 pop dx;lay phan tu o dinh ngan xep dua vao dx mov ah,2 ;in ky tu int 21h

cmp cx,1;so sanh cx voi 1 jne end;jump not equal :nhay den &

039;end&

039; neu khong bang ;ve dos Mov ah, 4Ch Int 21h main endp end 8. (asembly) Tìm giá trị lớn nhất của mảng .Model small .Stack 100H .Data list DB 1,2,3,4,5,6,7,8, .code

HUY INIT

.CODE

MAIN:

MOV AX, @DATA

MOV DS,AX ;khoi tao thanh ghi ds

LEA DX,tb1 ;xuat chuoi tb MOV AH, INT 21h

LEA DX,s MOV AH,10 ;nhap chuoi s INT 21h

LEA DX,tb MOV AH,9 ;xuat chuoi tb INT 21h

;Tinh chieu dai chuoi mov ax, MOV AL,s+1 ;Chuyen chieu dai chuoi vao ax al= MOV CX,0 ;Khoi tao bien dem cx=0(count) MOV BX,10 ;khoi tao so chia ;123 push 3 2 1 =>pop 1 2 3 LapDem1:; day cac so vao ngan xep MOV DX,0 ;khoi tao phan du bang 0 DIV BX ; chia 10 PUSH DX ; lay dx la phan du day vao ngan xep INC CX ;tang cx len 1 don vi CMP AX,0 ;so sanh ax phan thuong khac 0 thi tiep tuc vong lap JNZ LapDem1 ;jump not zezo ;xuat chieu dai chuoi

LapDem2: ; lay cac so tu ngan xep ra POP DX ;Chua so du trong phep chia

HUY INIT

ADD DX,&

039;0&

039; ;chuyen chu so -> ky tu so MOV AH, INT 21H LOOP LapDem

MOV AH,4ch INT 21h END MAIN End

  1. (asembly) Nhập vào một số và tính giai thừa của số đó trên emu808 6

;Nhap vao so va tinh giai thua .model small .stack 100 .data muoi dw 10 TB1 db 10,13,&

039;KET QUA LA: $&

039; .code main proc mov ax,@data mov ds,ax ;khoi tao thanh ghi ds

mov ah,1 ;nhap 1 ky tu tu ban phim int 21h sub al,&

039;0&

039; ;vd :chuyen ky tu&

039;5&

039; ve so 5 mov cx,0 ;cx= mov cl,al ;cl=

lea dx,TB1 ; in chuoi tb mov ah, int 21h ;1234 mov ax,1;khoi tao ket qua ban dau = mov bx,1 ;bien tang