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... ♥

a luy thua n (lket asm va C++)

Bài 1

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

; a lũy thừa n (với a là số nguyên và n là số nguyên dương) |

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

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

-      Ngôn ngữ C++:

·         Nhận a và n,

·         Gọi chương trình con tính an 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 an

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

Tệp C++:

#include <iotream.h>

#include <conio.h>

int a,n;

extern int LT();

void main(void)

{

                        clrscr();

                        cout<<”

Hay vao a : “; cin>>a;

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

”<<a<<” luy thua “<<n<<” la : “<<LT();

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

EXTRN _a:word, _n:word

.CODE

PUBLIC @LT$qv

@LT$qv  PROC

                        mov  bx,_a                 ; bx = a

                        mov  cx,_n                 ; cx = n

                        mov  ax,1                   ; ax = 1

                        and    cx,cx                ; Dựng cờ để xét liệu n = 0

                        jz       L2                     ; Nếu n = 0 thì nhảy đến L2

    L1:

                        mul   bx                      ; còn n # 0 thì tiến hành vòng lặp tính an  

                        loop  L1

    L2:

@LT$qv  ENDP

                        END

Cách 2: Hàm Assembly có 1 đối (a là tham số thực và n vẫn khai báo biến toàn cục)

Tệp C++:

#include <iotream.h>

#include <conio.h>

extern int LT(int i1);

void main(void)

{

                        int  a;

                        clrscr();

                        cout<<”

Hay vao a : “; cin>>a;

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

”<<a<<” luy thua “<<n<<” la : “<<LT(a);

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

 EXTRN  _n:word

.CODE

PUBLIC @LT$qi

@LT$qi  PROC

                        push BP                      ; Cất giá trị BP hiện thời vào stack

                        mov  BP,SP                ; BP = SP

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

                        mov  cx,_n                 ; cx = n

                        mov  ax,1                   ; ax = 1

                        and    cx,cx                ; Dựng cờ để xét liệu n = 0

                        jz       L2                     ; Nếu n = 0 thì nhảy đến L2

    L1:

                        mul   bx                      ; còn n # 0 thì tiến hành vòng lặp tính an  

                        loop  L1

    L2:

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

@LT$qi  ENDP

                        END

Cách 3: Hàm Assembly có 2 đối (a và n đều là tham số thực)

Tệp C++:

#include <iotream.h>

#include <conio.h>

extern int LT(int i1, int i2);

void main(void)

{

                        int  a,n;

                        clrscr();

                        cout<<”

Hay vao a : “; cin>>a;

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

”<<a<<” luy thua “<<n<<” la : “<<LT(a,n);

                        getch();

}

Tệp Assembly:

.MODEL large

.CODE

 PUBLIC @LT$qii

@LT$qii  PROC

                        push BP

                        mov  BP,SP

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

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

                        mov  ax,1                   ; ax = 1

                        and    cx,cx                ; Dựng cờ để xét liệu n = 0

                        jz       L2                     ; Nếu n = 0 thì nhảy đến L2

     L1:

                        mul   bx                      ; còn n # 0 thì tiến hành vòng lặp tính an  

                        loop  L1

     L2:

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

@LT$qii  ENDP

                        END

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

Tags: #dương