Tong cap so cong (asm c++)
Bài 6
;-----------------------------------------------------------------
; Tổng cấp số cộng khi biết n (số lượng thành phần) |
; d (công sai) và u1 (giá trị thành phần đầu tiên) |
;-----------------------------------------------------------------
Phân công nhiệm vụ :
- Ngôn ngữ C++:
· Nhận n,d và u1,
· Gọi chương trình con tính tổng cấp số cộng 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 tổng cấp số cộng
Cách 1: Hàm Assembly không đối (n,d và u1 khai báo biến toàn cục)
Tệp C++:
#include <iotream.h>
#include <conio.h>
int n,d,u1;
extern int CSC();
void main(void)
{
clrscr();
cout<<”
Hay vao n : “; cin>>n;
cout<<”
Hay vao d : “; cin>>d;
cout<<”
Hay vao u1 : “; cin>>u1;
cout<<”
Tong cap so cong la : “<<CSC();
getch();
}
Tệp Assembly:
.MODEL large
.DATA
EXTRN _n:word, _d:word,_u1:word
.CODE
PUBLIC @CSC$qv
@CSC$qv PROC
mov cx,_n ; cx = n
mov bx,_d ; bx = d
mov ax,_u1 ; ax = u1
mov dx,ax ; dx = u1
dec cx ; cx = n-1
L1:
add dx,bx ; dx = ui
add ax,dx ; ax = (tổng các thành phần từ u1 đến ui-1) + ui
loop L1
@CSC$qv ENDP
END
Cách 2: Hàm Assembly có 1 đối (n là tham số thực - cất vào stack, còn d,u1 vẫn là biến toàn cục)
Tệp C++:
#include <iotream.h>
#include <conio.h>
int d,u1;
extern int CSC(int i1);
void main(void)
{
clrscr();
cout<<”
Hay vao n : “; cin>>n;
cout<<”
Hay vao d : “; cin>>d;
cout<<”
Hay vao u1 : “; cin>>u1;
cout<<”
Tong cap so cong la : “<<CSC(n);
getch();
}
Tệp Assembly:
.MODEL large
.DATA
EXTRN _d:word, _u1:word
.CODE
PUBLIC @CSC$qi
@CSC$qi PROC
push BP
mov BP,SP
mov cx,[BP+6] ; cx = n (lấy giá trị n từ stack)
mov bx,_d ; bx = d
mov ax,_u1 ; ax = u1
mov dx,ax ; dx = u1
dec cx ; cx = n-1
L1:
add dx,bx ; dx = ui
add ax,dx ; ax = (tổng các thành phần từ u1 đến ui-1) + ui
loop L1
pop BP ; Hồi phục giá trị của BP
@CSC$qi ENDP
END
Cách 3: Hàm Assembly có 2 đối (n, d là tham số thực - cất vào satck, còn u1 vẫn là biến toàn cục)
Tệp C++:
#include <iotream.h>
#include <conio.h>
int u1;
extern int CSC(int i1,int i2);
void main(void)
{
int n,d;
clrscr();
cout<<”
Hay vao n : “; cin>>n;
cout<<”
Hay vao d : “; cin>>d;
cout<<”
Hay vao u1 : “; cin>>u1;
cout<<”
Tong cap so cong la : “<<CSC(n,d);
getch();
}
Tệp Assembly:
.MODEL large
.DATA
EXTRN _u1:word
.CODE
PUBLIC @CSC$qii
@CSC$qii PROC
push BP
mov BP,SP
mov cx,[BP+6] ; cx = n (lấy giá trị n từ stack)
mov bx,[BP+8] ; bx = d (lấy giá trị d từ stack)
mov ax,_u1 ; ax = u1
mov dx,ax ; dx = u1
dec cx ; cx = n-1
L1:
add dx,bx ; dx = ui
add ax,dx ; ax = (tổng các thành phần từ u1 đến ui-1) + ui
loop L1
pop BP ; Hồi phục giá trị BP
@CSC$qii ENDP
END
Cách 4: Hàm Assembly có 3 đối (n, d và u1 đều là tham số thực - cất vào satck)
Tệp C++:
#include <iotream.h>
#include <conio.h>
extern int CSC(int i1,int i2,int i3);
void main(void)
{
int n,d,u1;
clrscr();
cout<<”
Hay vao n : “; cin>>n;
cout<<”
Hay vao d : “; cin>>d;
cout<<”
Hay vao u1 : “; cin>>u1;
cout<<”
Tong cap so cong la : “<<CSC(n,d,u1);
getch();
}
Tệp Assembly:
.MODEL large
.CODE
PUBLIC @CSC$qiii
@CSC$qiii PROC
push BP
mov BP,SP
mov cx,[BP+6] ; cx = n (lấy giá trị n từ stack)
mov bx,[BP+8] ; bx = d (lấy giá trị d từ stack)
mov ax,[BP+10] ; ax = u1 (lấy từ stack)
mov dx,ax ; dx = u1
dec cx ; cx = n-1
L1:
add dx,bx ; dx = ui
add ax,dx ; ax = (tổng các thành phần từ u1 đến ui-1) + ui
loop L1
pop BP ; Hồi phục giá trị BP
@CSC$qiii ENDP
Bạn đang đọc truyện trên: Truyen247.Pro