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

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

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

#dương