ASSEMBLY CODE 1.Thực hiện nhập vào từ bàn phím một kí tự, nếu không phải là ký tự số thì nhập lại. Sau đó hiển thị ký tự vừa nhập trên dòng tiếp theo. 2.Thực hiện nhập vào từ bàn phím 2 ký tự trong đó phải có 1 ký tự là số, 1 ký tự là chữ in thường. 3.Thực hiện nhập vào 2 số tự nhiên nhỏ hơn 10. Tìm số lớn nhất trong 2 số và in kết quả ra màn hình trên dòng tiếp theo. 4.Thực hiện nhập vào 2 số tự nhiên nhỏ hơn 10. Tìm số nhỏ nhất trong 2 số và in kết quả ra màn hình trên dòng tiếp theo. 5.Thục hiện nhập vào từ bàn phím một chữ cái in thường 'ch' và in ra các chữ in thường từ 'a' đến 'ch'. 6.Thục hiện nhập vào từ bàn phím một chữ cái in thường 'ch' và in ra các chữ in thường từ 'ch' đến 'z'. 7.Thực hiện nhập vào từ bàn phím 1 số tự nhiên N (N<10), tính tổng các số nguyên tử N đến 10 và lưu kết quả vào thanh ghi BX. 8.Thực hiện nhập vào từ bàn phím 1 ký tự là chữ cái in hoa, sau đó đếm số lượng bit 1 trong biểu diễn nhị phân mã ASCII của ký tự vừa nhập. 9.Cho trước 2 chữ cái in hoa ch1 và ch2 (ch1
16.Cho trước một số tự nhiên trong thanh ghi BX, in biểu diễn thập phân của số tự nhiên đó. 17.Cho trước một số tự nhiên trong thanh ghi BX, in biểu diễn thập lục phân của số tự nhiên đó. 18.Cho trước một số tự nhiên trong thanh ghi BX, in biểu diễn bát phân của số tự nhiên đó. 19.Cho một xâu S gồm các chữ cái in thường, tạo ra sâu S1 là xâu chứa các chữ cái in hoa của xâu S và in xâu S1 ra màn hình. 20.Cho một xâu ký tự S, tạo ra xâu S1 là xâu đảo ngược của xâu S và in xâu S1 ra màn hình. 21.Cho 2 xâu ký tự S1 và S2, kiểm tra xem S1 và S2 có bằng nhau hay không? 22.Cho xâu ký tự S, kiểm tra xem S có phải là xâu đối xứng hay không? 23.Cho xâu ký tự S, đếm số ký tự là chữ số có trong S. 24.Nhập vào từ bàn phím một xâu ký tự và lưu độ dài của xâu vào thanh ghi BX. 25.Cho xâu ký tự S độ dài l, tạo ra xâu S1 từ xâu S bằng cách lấy trong S từ vị trí thứ i(0
34.Tính tổng của các số lẽ trong đoạn [0,100] và lưu kết quả vào thanh ghi BX. 35.Kiểm tra số nguyên lưu trong thanh ghi BX là số chẵn hay lẽ. Link: http://www.ddth.com/showthread.php/250270-B%C3%A0it%E1%BA%ADpAssembly%21%21?s=27ff917aadc1bb774954eb7b740f79ed#ixzz1dBfxxsvt
Bài 1* ;;;;; .code ;Nhập 1 ký tự MOV AH,1 INT 21h ;Kiểm tra có phải là số không CMP AL,'0' JL ketthuc CMP AL,'9' JG ketthuc ;Xuống dòng MOV AH,2 MOV DL,0Ah ;Về đầu dòng MOV DL,0Dh INT 21h ;Hiển thị MOV DL,AL INT 21h ketthuc: ;Thoát ra DOS MOV AH,4Ch INT 21h
Link: http://www.ddth.com/showthread.php/250270-B%C3%A0it%E1%BA%ADpAssembly%21%21?s=27ff917aadc1bb774954eb7b740f79ed#ixzz1dBg3tMv M
.model small .stack 100h .data msg1 db 'nhap vao mot ky tu so:$' msg2 db 13,10,'$' msg3 db 'ban da nhap sai!$' a db ? .code main proc mov ax,@data mov ds,ax ;hien thi msg1 lap: mov ah,9 lea dx,msg1 int 21h ;nhap vao mov ah,1 int 21h mov a,al ;do ax co the bi thay doi do lenh xuong dong ;xuong dong_msg2 mov ah,9 lea dx,msg2 int 21h ;kiem tra cmp a,30h
jl tb cmp a,39h jg tb jmp thoat ;hien thi msg3 tb: mov ah,9 lea dx,msg3 int 21h ;xuong dong_msg2 lea dx,msg2 int 21h jmp lap ;hien thi ky tu so thoat: mov ah,2 mov dl,a int 21h ;tro ve dos mov ah,4ch int 21h main endp end main [=========> Bổ sung bài viết <=========] .model small .stack 100h .data msg1 db 'nhap vao mot ky tu so va mot ky tu hoa thuong:$' msg2 db 'nhap vao mot ky tu so $' msg3 db 'nhap vao mot ky tu hoa thuong:$' msg4 db 13,10,'$' msg5 db 'ban da nhap sai!$'
a db ? b db ? .code main proc mov ax,@data mov ds,ax
;hien thi msg1 mov ah,9 lea dx,msg1 int 21h ;xuong dong_msg4 mov ah,9 lea dx,msg4 int 21h ;nhap vao ky tu so ;hien thi msg2 lap1: mov ah,9 lea dx,msg2 int 21h mov ah,1 int 21h mov a,al ;do ax co the bi thay doi boi lenh xuong dong ;xuong dong_msg4 mov ah,9 lea dx,msg4 int 21h cmp a,30h jl tb1 cmp a,39h jg tb1
jmp thoat1 ;hien thi msg5 tb1: mov ah,9 lea dx,msg5 int 21h ;xuong dong_msg4 lea dx,msg4 int 21h jmp lap1 ;hien thi ky tu so thoat1: mov ah,2 mov dl,a int 21h ;xuong dong_msg4 mov ah,9 lea dx,msg4 int 21h ;nhap vao ky tu hoa thuong ;hien thi msg3 lap2: mov ah,9 lea dx,msg3 int 21h mov ah,1 int 21h xor bx,bx mov b,al ;do ax co the bi thay doi boi lenh xuong dong ;xuong dong_msg4 mov ah,9 lea dx,msg4
int 21h ;kiem tra cmp b,61H jl tb2 cmp b,7AH jg tb2 jmp thoat2 ;hien thi msg5 tb2: mov ah,9 lea dx,msg5 int 21h ;xuong dong_msg4 lea dx,msg4 int 21h jmp lap2 ;hien thi ky tu so thoat2: mov ah,2 mov dl,b int 21h ;tro ve dos mov ah,4ch int 21h main endp end main Link: http://www.ddth.com/showthread.php/250270-B%C3%A0it%E1%BA%ADpAssembly%21%21?s=27ff917aadc1bb774954eb7b740f79ed#ixzz1dBgAKox j
bài 3 này thì quá dễ .model small .stack 100h .data msg1 db 'nhap so thu nhat: $' msg2 db 13,10,'nhap so thu 2: $' msg3 db 13,10,'so lon nhat trong 2 so la: $' .code main proc mov ax,@data mov ds,ax ;nhap so thu nhat mov ah,9 lea dx,msg1 int 21h ;nhap vao mov ah,1 int 21h and al,0fh xor cx,cx mov cl,al ;nhap so thu hai mov ah,9 lea dx,msg2 int 21h ;nhap vao mov ah,1 int 21h and al,0fh xor bx,bx mov bl,al ;hien thi so lon nhat
mov ah,9 lea dx,msg3 int 21h ;so sanh cmp bl,cl jg ht1 ;lon hon jl ht2 ;nho hon ht1: add bl,30h mov ah,2 mov dl,bl int 21h jmp thoat ht2: add cl,30h mov ah,2 mov dl,cl int 21h thoat: ;tro ve dos mov ah,4ch int 21h main endp end main [=========> Bổ sung bài viết <=========] bài 4 thì tương tự như trên thay đổi máy dòng lệnh thôi [=========> Bổ sung bài viết <=========] bài 5 và 6 tương tự như nhau chỉ khác ở câu lệnh lặp là repeat .. until và while .. do .model small .stack 100h
.data msg1 db 'nhap vao mot chu cai in thuong: $' msg2 db 13,10,'chu in thuong tu a den $' msg3 db 'la: $' msg4 db 13,10,'$' msg5 db ' $' k db ? .code main proc mov ax,@data mov ds,ax ;hien thi msg1 mov ah,9 lea dx,msg1 int 21h ;nhap vao mov ah,1 int 21h mov k,al xor bx,bx mov bl,60h ;hien thi msg2 va msg3 mov ah,9 lea dx,msg2 int 21h mov ah,2 mov dl,k int 21h mov ah,9 lea dx,msg3 int 21h ;xuong dong lea dx,msg4
int 21h lap: inc bl mov ah,2 mov dl,bl int 21h mov ah,9 lea dx,msg5 int 21h cmp bl,k je thoi jmp lap thoi: ;tro ve dos mov ah,4ch int 21h main endp end main Link: http://www.ddth.com/showthread.php/250270-B%C3%A0it%E1%BA%ADpAssembly%21%21?s=27ff917aadc1bb774954eb7b740f79ed#ixzz1dBgI2Fj N
Tình Assembly Tình anh đó như "infinite loop". Chỉ vì em, anh "move" mãi chẳng ngừng Trái tim anh vẫn "push", "pop" không ngưng "Load" tâm tình kết nên bài thơ ngắn. "Instruction" dẫu rằng dài hay vắn, "Overflow", "carry set" chẳng màng Trái tim anh luôn luôn mãi "branch" ngang "Jump" thẳng tới phương trời thương bên nớ.
Tình rộn ràng "or" tình sẽ tan vỡ?? Còn tùy theo những tín hiệu "return". Anh "exchange" trọn vẹn cả tâm hồn Không cần biết đến "addressing mode". Hãy "add" dùm cho anh thêm điểm tốt "Multiply" theo cấp số tình yêụ Đừng "compare" tính toán thiệt hơn nhiều, Cứ "shift" theo nhịp trái tim, em nhé. Thấy tật xấu, em nhớ "clear", đừng kể Chỉ "extend" ưu điểm gấp bội thêm, Rồi "link" cùng những kỷ niệm êm đềm Mình đã "swap" cùng nhau từ thuở nớ. Lưới tình yêu "trap" đôi ta vào rọ Trói đời nhau theo "logic" của trái tim: Link: http://www.ddth.com/showthread.php/250270-B%C3%A0it%E1%BA%ADpAssembly%21%21?s=27ff917aadc1bb774954eb7b740f79ed#ixzz1dBgL8Q eN
Viết chương trình nhập vào một chuỗi--> in ra chuỗi vừa nhập dưới dạng 1 ký tự trên 1 dòng.
;chuong trinh nhap vao mot chuoi, hien thi theo hang doc .model small .stack 100h .data thongbao1 db 'nhap chuoi, enter de ket thuc: $',10,13 thongbao2 db 13,10,'hien thi chuoi: $' xuongdong db 13,10,'$' str db 100 dup(?)
main proc mov ax,@Data mov ds,ax mov es,ax xor cx,cx mov ah,9 lea dx,thongbao1 int 21h cld lea di,str mov ah,1 nhaptiep: int 21h cmp al,13 je thoinhap stosb inc cx jmp nhaptiep thoinhap: mov ah,9 lea dx,thongbao2 int 21h lea si,str lap: mov ah,9 lea dx,xuongdong int 21h mov ah,2 lodsb mov dl,al int 21h loop lap
mov ah,4ch int 21h main endp end main
Bài 1: In ra màn hình 255 ký tự mở rộng có trong bảng mã ASCII Giải code segment assume cs:code, ds:code org 100h begin: mov cx, 255 mov al,0 lap: mov ah,2 mov dl,al inc dl int 21h loop lap mov ax, 4c00h int 21h code ends end begin Bài 2: Nhập ký tự từ bàn phím nếu gặp phím ESC có mã là "27" thì thoát khỏi chương trình. Giải
code segment assume cs:code, ds:code org 100h begin: mov ah,1 int 21h cmp al,27 ;so sanh ky tu nhap vao voi ky tu 27 la ma ESC je thoat ;neu la ma ESC thi thoat khoi chuong trinh jmp begin ;neu khac ma ESC thi quay lai tu dau thoat: mov ax, 4c00h int 21h code ends end begin Bài 3: Viết chương trình nhập vào từ bàn phím nếu ký tự không nằm trong khoảng từ "A" lớn đến "Z" lớn thì thoát khỏi chương trình. Giải code segment assume cs:code, ds:code org 100h begin: mov ah,1 int 21h mov bl,al cmp bl,'A';so sanh A lon den Z lon jb thoat ;neu khac khoang A lon den Z lon cmp bl,'Z';thi thoat khoi chuong trinh ja thoat
jmp begin thoat: mov ax, 4c00h int 21h code ends end begin
Bài 4: Viết chương trình in ra hình trái tim mầu đỏ nền đen ở tâm màn hình. Giải: code segment assume cs:code, ds:code org 100h begin: mov ax, 0b800h mov ds, ax mov al,3 mov ah,00000100b d=12 c=40 mov si,(d*80+c)*2 mov [si],ax mov ax, 4c00h int 21h code ends end begin Bài 5: Viết chương trình in ra màn hình trái tim mầu đỏ nền đen và dùng các phím (t,r,,u,d) để điều khiển trái tim dịch sang(trái,
phải, trên, dưới) Giải: code segment assume cs:code, ds:code org 100h begin: mov ax, 0b800h mov ds, ax mov al,3 mov ah,00000100b d=12 c=40 mov si,(d*80+c)*2 mov [si],ax lap: mov ah,7 ;nhap ky tu tu ban phim khong hien len man hinh int 21h cmp al,'l';so sanh neu dung thi thuc hien lenh trai je trai cmp al,'r' je phai cmp al,'u' je tren cmp al,'d' je duoi jmp thoat trai: mov al,3
mov ah,4 mov [si],0720h sub si,2 mov [si],ax jmp lap
;xoa ky tu vua dich chuyen
phai: mov al,3 mov ah,4 mov [si],0720h add si,2 mov [si],ax jmp lap
;xoa ky tu vua dich chuyen
tren: mov al,3 mov ah,4 mov [si],0720h sub si,160 mov [si],ax jmp lap
;xoa ky tu vua dich chuyen
duoi: mov al,3 mov ah,4 mov [si],0720h add si,160 mov [si],ax jmp lap
;xoa ky tu vua dich chuyen
thoat:
mov ax, 4c00h int 21h code ends end begin Bài 6: Viết chương trình hiển thị dòng chữ "KHOA TIN HOC" có mầu đỏ nền đen rồi xuống dòng và đảo ngược dòng chữ đó. Giải code segment assume cs:code,ds:code org 100h begin: mov ax,0b800h mov ds,ax d=5 c=10 mov al,'K' mov ah,65 mov di,(d*80+c)*2 mov [di],ax mov al,'H' mov ah,58 mov[di+2],ax mov al,'O' mov ah,24 mov[di+4],ax mov al,'A' mov ah,30
mov[di+6],ax mov al,' ' mov ah,00 mov[di+8],ax mov al,'T' mov ah,65 mov[di+10],ax mov al,'I' mov ah,40 mov[di+12],ax mov al,'N' mov ah,12 mov[di+14],ax mov ah,1 int 21h d=5 c=10 push[di] push[di+2] push[di+4] push[di+6] push[di+8] push[di+10] push[di+12] push[di+14] d=6 c=10 mov si,(d*80+c)*2
pop[si] pop[si+2] pop[si+4] pop[si+6] pop[si+8] pop[si+10] pop[si+12] pop[si+14] mov ax,4c00h int 21h code ends end begin
Bảng mã ASCII Các ký tự ASCII (bao gồm phần mở rộng định nghĩa bởi IBM) được chia thành 4 nhóm mỗi nhóm 32 ký tự. 32 ký tự đầu tiên, mã ASCII từ 0 đến 1Fh (31), dạng các ký tự đặc biệt không thể in ra (nonprinting characters) được gọi là các ký tự điều khiển. Chúng ta gọi các ký tự điều khiển bởi vì chúng thực hiện các điều khiển in/hiển thị khác nhau hơn là thực hiện các thao tác trên ký tự hiển thị. Ví dụ bao gồm carriage return (CR), làm cho ví trí con trỏ về vị trí bên trái của dòng ký tự, line feed (LF) (làm di chuyển con trỏ về một vị trí phía bên trái). Không may, các ký tự điều khiển thực hiện các hành động khác nhau trên các ký tự khác nhau. Có rất ít sự tiêu chuẩn giữa các thiết bị ra. Để tìm một cách chính xác cách mà một ký tự điều khiển ảnh hưởng lên các thiết bị cụ thể, bạn sẽ cần tài liệu hường dẫn cho nó. Nhóm 32 ký tự mã ACII thứ hai được so sánh với các hệ thống dấu chấm câu khác nhau, các ký tự đặc biệt, và các chữ số. Các ký tự đáng chú ý nhất trong nhóm này bao gồm ký tự trống (mã ASCII 20h) và các chữ số (mã ASCII 30h..39h). Chú ý rằng các chữ số này khác với giá trị số của chúng chỉ trong nibble H.O. Bằng cách trừ 30h từ mã ASCII cho chữ số cụ thể nào đó bạn có thể thu được số tương đương với chữ số đó. Nhóm 32 ký tự mã ASCII thứ ba được dành cho các ký tự chữ cái hoa. Các mã ASCII này là “A..Z” nằm trong khoảng 41h..5Ah (65..90). VÌ chỉ có 26 chữ cái khác nhau, 6 mã còn lại là dùng cho các ký tự đặc biệt.
Nhóm thứ bốn, và cũng là cuối cùng, nhóm 32 ký tự mã ASCII này được dùng cho các ký tự chữ cái thường, 5 ký tự đặc biết được thêm vào, và một ký tự điều khiển khác (delete). Chú ý rằng các ký tự chữ cái thường sử mã ASCII từ 61h..7Ah. Nếu bạn muốn chuyển các mã giữ các ký tự hoa và thường theo nhị phân, bạn sẽ cần lưu ý các ký tự hoa khác với các ký tự thường của chúng chỉ đúng một vị trí bit. Ví dụ như, xét các mã ký tự “E” và “e” sau đây:
Chỉ có một ví trí khác nhau của hai mã đó là bit năm. Ký tự hoa luôn chứa không ở bit năm; ký tự chữ cái thường luôn chứa một ở bit 5. Bạn có thể sử dụng đặc điểm này để chuyển đổi một cách nhanh chóng giữa ký tự hoa và ký tự thường. Nếu bạn có một ký tự hoa bạn có thể làm nó thành ký tự thường bằng cách đặt bit năm thành một. Nếu bạn có một ký tự thường và bạn muốn nó thành ký tự hoa , bạn có thể làm nó bằng cách đặt bit năm là không. Bạn có thể đảo ngược các ký tự chữ cái giữa ký tự hoa và thường một cách đơn giản là đảo ngược bit năm. Quả thực, bit năm và sáu xác định được nhóm nào trong bốn nhóm của ký tự ASCII mà bạn đang dùng:
Vì vậy bạn có thể, ví dụ như, chuyển đổi giữa các ký tự hoa hay ký tự thường (hay các ký tự đặc biệt tương đương) thành các ký tự điều khiển tương đương với nó bằng cách đặt các bit năm và bit sáu thành không.
Xét các ký tự mã ASCII của các chữ số:
Các biểu diễn thập phân của các mã ASCII rất không sáng sủa. Tuy nhiên, biểu diễn của hexa của các mã ASCII này lại rất quan trọng , nibble L.O. của mã ASCII là số nhị phân tương đương với chữ số được biểu diễn. Bằng cách loại bỏ (ví dụ đặt bằng 0) nibble H.O. của một ký tự số, bạn có thể chuyển mã ký tự đó thành biểu diễn giá trị nhị phân tương đương. Ngược lại, bạn có thể chuyển một giá trị nhị phân trong phạm vi 0..9 thành biểu diễn ký tự ASCII của nó bằng cách đơn giản là đặt nibble H.O. thành ba. Chú ý rằng bạn có thể sử dụng các phép toán logic AND để làm cho các bit H.O. thành 0; cũng tương tự như vậy, bạn có thể sử phép logic OR để làm cho bit H.O. thành 0011(ba). Chú ý rằng bạn không thể chuyển một chuỗi các ký tự số thành biểu diễn nhị phân tương đương của nó bằng cách loại bỏ đị nibble H.O. từ mỗi số trong chuỗi. Chuyển 123 (31h 32h 33h) trong dãy ba byte cấu thành: 010203h, không giá trị đúng là 7Bh. Chuyển một chuỗi chữ số thành một số nguyên đòi hỏi nhiều sự phức tạp hơn điều này; sự chuyển đổi trên chỉ làm việc cho mỗi chữ số duy nhất. Bit bảy trong mã ASCII tiêu chuẩn luôn là không. Điều này nghĩa là tập ký tự ASCII chỉ dùng một nửa cho các mã trong 8 bit (1 byte). IBM sử dụng 128 ký tự còn lại cho các ký tự đặc biệt khác bao gồm ký tự quốc tế (ví dụ ký tự phát âm...), ký tự toán học, và các ký tự đường vẽ ( line drawing characters). Chú ý rằng không có một tiêu chuẩn mở rộng các ký tự cho bảng mã ASCII. Đương nhiên, hãng IBM có tầm ảnh hưởng rộng, vì vậy hầu hết tất cả các máy tính cá nhân hiện đại trên cơ sở 8086 với màn hình hiển thị được mở rộng ký tự IBM/ASCII. Đa số các máy in cũng hỗ trợ ký tự IBM.
http://www.hvaonline.net/hvaonline/posts/list/27422.hva