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: AzTruyen.Top