Tinh n! (lket asm va C++)

Màu nền
Font chữ
Font size
Chiều cao dòng

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: Truyen2U.Pro

#dương