Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

Tinh n! (lket asm va C++)

Bài 2

;----------------------

; n! (n từ 0 đến 7) |

;----------------------

Phân công nhiệm vụ :

-      Ngôn ngữ C++:

·         Nhận n,

·         Gọi chương trình con tính n! do Assembly viết,

·         Hiện kết quả lên màn hình.

-      Ngôn ngữ Assembly : Chương trình con tính n!

Cách 1: Hàm Assembly không đối (n khai báo biến toàn cục)

Tệp C++:

#include <iotream.h>

#include <conio.h>

extern int GT();

void main(void)

{

                        clrscr();

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

Giai thua cua ”<<n<<” la : “<<GT();

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

 EXTRN  _n:word

.CODE

 PUBLIC @GT$qv

@GT$qv  PROC

                        mov  cx,_n                 ; cx = n

                        mov  ax,1                   ; ax = 1

                        cmp  cx,2                   ; So sánh n < 0 (tức là n=0 hoặc 1)

                        jb       L2                     ; Nếu n < 0 thì nhảy đến L2

    L1:

                        mul   cx                      ; còn n ≥ 0 thì tiến hành vòng lặp tính n! 

                        loop  L1

    L2:

@GT$qv  ENDP

                        END

Cách 2: Hàm Assembly có 1 đối (n là tham số thực)

Tệp C++:

#include <iotream.h>

#include <conio.h>

extern int GT(int i);

void main(void)

{

                        clrscr();

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

Giai thưa cua ”<<n<<” la : “<<GT(n);

                        getch();

}

Tệp Assembly:

.MODEL large

.CODE

 PUBLIC @GT$qi

@GT$qi  PROC

                        push BP

                        mov  BP,SP

                        mov  cx,[BP+6]        ; cx = a (lấy giá trị n trong stack đưa vào cx)

                        mov  ax,1                   ; ax = 1

                        cmp  cx,2                   ; So sánh n < 0 (tức là n=0 hoặc 1)

                        jb       L2                     ; Nếu n < 0 thì nhảy đến L2

    L1:

                        mul   cx                      ; còn n ≥ 0 thì tiến hành vòng lặp tính n! 

                        loop  L1

    L2:

                        pop   BP                     ; Hồi phục giá trị BP

@GT$qi  ENDP

                        END

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #dương