intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình Assembly: Chương 5 - Nguyễn Văn Thọ

Chia sẻ: Cvcxbv Cvcxbv | Ngày: | Loại File: PDF | Số trang:10

182
lượt xem
16
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong Bài giảng Lập trình Assembly Chương 5 Stack và chương trình còn nhằm trình giới về Stack, các lệnh thao tác Stack, và các ví dụ. Stack là vùng nhớ trong của bộ nhớ, tổ chức kiểu vào trước ra sau.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình Assembly: Chương 5 - Nguyễn Văn Thọ

  1. DuyTan University Assembly Language Programming I H C DUY TÂN KHOA CÔNG NGH THÔNG TIN CH NG 5 STACK & CH NG TRÌNH CON Nguy n V n Th B môn i n t vi n thông Khoa Công ngh thông tin, i h c Duy Tân – 2008 Nguyen Van Tho – Duy Tan University. STACK - Là m t vùng nh% trong b nh% - T) ch+c ki.u vào tr0%c-ra sau - Ph5n t6 cu7i cùng g8i là :;nh ngp -Do 2 thanh ghi SS và SP quBn lý - SS ch+a :Da ch; :oEn Stack - SP ch+a :;nh Stack - Khai báo :oEn ngp : .STACK Nguyen Van Tho – Duy Tan University. Ví dN : .STACK 100H Offset STACK SP 00F2h 0100h . . . 00F2h 00F4h 00F6h 00F8h 00FAh 00FCh 00FEh 0100h SP Ng n x5p r7ng
  2. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. CÁC L NH THAO TÁC STACK • PUSH • POP • PUSHF • POPF Nguyen Van Tho – Duy Tan University. L NH PUSH Cú pháp : PUSH Source - Source là thanh ghi 16bit hoVc 1 tW nh% (2byte) L[nh PUSH th\c hi[n công vi[c sau 1 - GiBm SP :i 2 2 - L^y n i dung c_a source :0a vào :;nh ngp Ví dN : PUSH AX ; c^t AX vào stack PUSH BX ; c^t BX vào stack Nguyen Van Tho – Duy Tan University. L NH POP Cú pháp : POP Dest - Dest là thanh ghi 16bit hoVc 1 word - L[nh PUSH th\c hi[n công vi[c sau 1 - L^y n i dung :;nh ngp :0a vào dest 2 - T
  3. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. L NH POP Cú pháp : PUSHF POPF Mô tB : PUSHF : PUSh thanh ghi cf POPF : POP thanh ghi cf Nguyen Van Tho – Duy Tan University. Ví dN : .STACK 100H .CODE MOV AX,9876H ; AX=9876h MOV BX,1234H ; BX=1234h PUSH AX ; c^t AX vào Stack PUSH BX ; c^t BX vào stack POP CX ; l^y n i dung :;nh stack :0a vào CX POP DX ; l^y n i dung :;nh stack :0a vào DX END Nguyen Van Tho – Duy Tan University. .STACK 100H Offset STACK MOV AX,9876H 0000h MOV BX,1234H . . 0100h SP . 00F2h 9876h AX 00F4h 00F6h 0100h BX 00F8h 00FAh CX 00FCh 00FEh DX 0100h SP Ng n x5p r7ng
  4. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. PUSP AX Offset STACK 0000h . . 00FEh SP . 00F2h 9876h AX 00F4h 00F6h 1234h BX 00F8h 00FAh CX 00FCh 00FEh 9876H DX 0100h SP Ng n x5p có 1 ph@n t Nguyen Van Tho – Duy Tan University. PUSP BX Offset STACK 0000h . . 00FCh SP . 00F2h 9876h AX 00F4h 00F6h 1234h BX 00F8h 00FAh CX 00FCh 1234h 00FEh 9876h DX 0100h SP Ng n x5p có 2 ph@n t Nguyen Van Tho – Duy Tan University. POP CX Offset STACK 0000h . . 00FEh SP . 00F2h 9876h AX 00F4h 00F6h 1234h BX 00F8h 00FAh 1234h CX 00FCh 1234h 00FEh 9876h DX 0100h SP Ng n x5p có 1 ph@n t
  5. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. POP DX Offset STACK 0000h . . 00FEh SP . 00F2h 9876h AX 00F4h 00F6h 1234h BX 00F8h 00FAh 1234h CX 00FCh 1234h 00FEh 9876h 9876h DX 0100h SP Ng n x5p r7ng Nguyen Van Tho – Duy Tan University. Ví dN 5.1 : Vi>t ch0ong trình nhqp vào 1churi các kí t\ . Hi.n thD lEi churi kí t\ :ó theo th+ t\ ng0tc lEi . MOV CX,0 ; :>m =0 MOV AH,1 ; chuun bD :8c INT 21H ; :8c 1 kí t\ While: CMP AL,13 ; Enter ? JE EndWhile ; :úng, dWng :8c PUSH AX ; không :úng, c^t AX vào stack INC CX ; tm INT 21H ; :8c 1 kí t\ JMP While ; try lEi vòng lVp EndWhile: Nguyen Van Tho – Duy Tan University. Ví dN 5.1 (tt) CMP CX,0 ; :>m =0 ? JE Exit ; :úng, dWng MOV AH,2 ; Chuun bD hi.n thD LAP: POP DX ; L^y kí t\ tW stack INT 21H ; hi.n thD LOOP LAP ; lVp lEi CX l5n Exit:
  6. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. Ví dN 5.2 : Vi>t ch0ong trình xu^t giá trD trong thanh ghi AX ra màn hình dEng thqp phân. GiB s6 : AX =12345 Chia AX cho 10 th0ong =1234 s7 d0 =5 Chia th0ong(1234) cho 10 th0ong =123 s7 d0 =4 Chia th0ong(123) cho 10 th0ong =12 s7 d0 =3 Chia th0ong(12) cho 10 th0ong =1 s7 d0 =2 Chia th0ong(1) cho 10 th0ong =0 s7 d0 =1 SA ta c@n xuBt chính là các sA dH trong các phép chia theo thJ tK ngHLc l i Nguyen Van Tho – Duy Tan University. Thuqt toán : >m =0 Do Chia AX cho 10 C^t s7 d0 vào Stack >m = :>m+1 While AX=0 For (s7 l5n = :>m) L^y s7 tW ngp )i thành kí t\ Hi.n thD EndFor Nguyen Van Tho – Duy Tan University. MOV CX,0 ; >m =0 @DoOut: MOV DX,0 ; ph5n cao =0 MOV BX,10 ; s7 chia=10 DIV BX ; AX:10, th0ong AX, s7 d0 DX PUSH DX ; c^t s7 d0 vào stack INC CX ; :>m=:>m +1 CMP AX,0 ; th0ong=0? JNE DoOut ; không :úng, lVp lEi MOV AH,2 ; chuun bD hi.n thD @Print: POP DX ; L^y s7 tW stack DL ADD DL,30H ; :)i thành kí t\ INT 21H ; hi.n thD LOOP @Print ; lVp lEi CX l5n
  7. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. CBi ti>n ch0ong trình :. hi.n thD s7 âm ? Thêm vào No n chHOng trình kiRm tra AX có phSi là sA âm, n5u AX
  8. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. CBi ti>n ch0ong trình :. có th. nhqp vào s7 âm Thuqt toán : Âm = 0 8c 1 kí t\ If kí t\ = ‘-’ then âm= 1 T)ng =0 8c 1 kí t\ Do )i kí t\ ra giá trD s7 T)ng = t)ng*10 + giá trD vWa tính :8c 1 kí t\ While kí t\ nhqn :0tc là Enter If âm = 1 then t)ng = - t)ng Nguyen Van Tho – Duy Tan University. CH NG TRÌNH CON (TH… T†C) • T) ch+c ki.u các ch0ong trình con giúp ch0ong trình rõ ràng hon, dˆ quBn lý hon • Khai báo 1 ch0ong trình con subname PROC ; thân ch0ong trình con ….. RET subname ENDP • G8i 1 ch0ong trình con CALL subname Nguyen Van Tho – Duy Tan University. MŠU CH NG TRÌNH CÓ CH NG TRÌNH CON .MODEL .STACK .DATA .CODE MAIN PROC … ; các l[nh c_a ch0ong trình chính :Vt y :ây CALL Subname ; g8i ch0ong trình con … ; các l[nh c_a ch0ong trình chính :Vt y :ây MAIN ENDP Subname PROC … ; thân ch0ong trình con Subname RET ; L[nh k>t thúc ch0ong trình con Subname Subname PROC END
  9. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. CALL VÀ RET • L[nh CALL dùng :. g8i ch0ong trình con • L[nh CALL th\c hi[n các vi[c sau • C^t :Da ch; c_a l[nh ti>p sau l[nh CALL vào ngp (:Da ch; trB v‚) • IP :0tc gán cho :Da ch; offset l[nh :5u tiên c_a ch0ong trình con chuy.n :i‚u khi.n cho ch0ong trình con • L[nh RET báo k>t thúc ch0ong trình con • L[nh RET th\c hi[n vi[c sau • L^y giá trD tEi :;nh ngp(:Da ch; trB v‚) :0a vào IP trB quy‚n :i‚u khi.n lEi cho ch0ong trình g8i Nguyen Van Tho – Duy Tan University. Ví dN 5.4 : Vi>t ch0ong trình nhqp vào : dài 3 cEnh c_a 1 tam giác. Tính chu vi tam giác và hi.n thD Thuqt toán Nhqp : dài cEnh th+ 1 (a) Nhqp : dài cEnh th+ 2 (b) Nhqp : dài cEnh th+ 3 (c) Chu vi = a + b + c Hi.n thD chu vi Có thR tX chJc vi c nhYp 1 sA thYp phân thành 1 chHOng trình con chHOng trình sZ sáng s[a và d bSo quSn hOn Nguyen Van Tho – Duy Tan University. .STACK 100h .DATA Indec PROC ; th_ tNc :8c 1 s7 a DW ? ; s7 :8c :0tc c^t trong AX b DW ? RET c DW ? Indec ENDP .CODE Main PROC Outdec PROC CALL Indec ; :8c 1 s7 ; xu^t BX ra màn hình MOV b,AX ; c^t vào a RET CALL Indec ; :8c 1 s7 Outdec ENDP MOV b,BX ; c^t vào b CALL Indec ; :8c 1 s7 END MOV c,BX ; c^t vào c ADD a,b ; a=a+b ADD b,c ; a=a+c MOV BX,a ; chuun bD xu^t CALL Outdec ; xu^t k>t quB Main ENDP
  10. DuyTan University Assembly Language Programming Nguyen Van Tho – Duy Tan University. Indec PROC ; Th_ tNc :8c 1 s7 thqp phân tW bàn phím ; Vào : không ; Ra : AX ch+a s7 thqp phân :8c vào PUSH BX ; c^t BX vào stack PUSH CX ; c^t CX vào stack MOV BX,0 ; t)ng =0 @DoIn: MOV AH,01H ; Chuun bD :8c INT 21H ; :8c 1 kí t\ CMP AL,13 ; kí t\ = Enter ? JE @ExitIn ; :úng, dWng SUB AL,30H ; ko :úng, :)i thành s7 MOV AH,0 ; xóa ph5n cao PUSH AX ; C^t s7 m%i nhqp vào stack MOV AX,BX ; AX = t)ng MOV CX,10 ; CX=10 MUL CX ; AX=AX*10 POP BX ; l^y s7 tW stack ADD BX,AX ; t)ng = AX+ s7 vWa nhqp JMP @DoIn @ExitIn: POP CX ; phNc h•i CX POP BX ; phNc h•i BX RET Indec ENDP Outdec PROC Nguyen Van Tho – Duy Tan University. ; Th_ tNc xu^t m t s7 thqp phân ra màn hình ; Vào : BX ch+a s7 c5n xu^t ; Ra : Không PUSH AX ; c^t AX vào stack PUSH BX ; c^t BX vào stack PUSH CX ; c^t CX vào stack PUSH DX ; c^t DX vào stack MOV CX,0 ; >m =0 @DoOut: MOV DX,0 ; ph5n cao =0 MOV BX,10 ; s7 chia=10 DIV BX ; AX:10, th0ong AX, s7 d0 DX PUSH DX ; c^t s7 d0 vào stack INC CX ; :>m=:>m +1 CMP AX,0 ; th0ong=0? JNE DoOut ; không :úng, lVp lEi MOV AH,2 ; chuun bD hi.n thD @Print: POP DX ; L^y s7 tW stack DL ADD DL,30H ; :)i thành kí t\ INT 21H ; hi.n thD LOOP @Print ; lVp lEi CX l5n POP DX ; phNc h•i DX POP CX ; phNc h•i CX POP BX ; phNc h•i BX POP AX ; phNc h•i AX RET Outdec ENDP Nguyen Van Tho – Duy Tan University. Chú ý : . tránh làm r7i loEn ch0ong trình, y :5u ch0ong trình con, ta phBi c^t các thanh ghi có s6 dNng vào stack và phNc h•i lEi giá trD cho nó y cu7i ch0ong trình con. . ch0ong trình rõ ràng và dˆ bBo quBn, y :5u ch0ong trình con nên có chú thích sau: Miêu tB ch0ong trình con này làm gì 5u vào : ch0ong trình con l^y dƒ li[u :. tính toán 5u ra : giá trD ch0ong trình con trB ra
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
4=>1