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

Tong cap so nhan (asm C++)

Bài 7

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

; Tổng cấp số nhân khi biết n (số lượng thành phần)   |

;    q (công bội) 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,q và u1,

·         Gọi chương trình con tính tổng cấp số 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 tổng cấp số nhân

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

Tệp C++:

#include <iotream.h>

#include <conio.h>

int n,q,u1;

extern int CSN();

void main(void)

{

                        clrscr();

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

Hay vao q : “; cin>>q;

                        cout<<”

Hay vao u1 : “; cin>>u1;

                        cout<<”

Tong cap so cong la : “<<CSN();

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

 EXTRN _n:word, _q:word,_u1:word

.CODE

 PUBLIC @CSN$qv

@CSN$qv  PROC

                        mov  cx,_n                 ; cx = n

                        mov  bx,_q                ; bx = q

                        mov  ax,_u1              ; ax = u1

                        mov  si,ax                  ; si = u1

                        dec    cx                      ; cx = n-1

    L1:

                        mul   bx                      ; ax = ui*q

                        add   si,ax                  ; si = (tổng các thành phần từ u1 đến ui-1) + ui

                        loop  L1

                        mov  ax,si                  ; Đưa giá trị tổng có ở si vào ax

@CSN$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 q và u1 vẫn là biến toàn cục)

Tệp C++:

#include <iotream.h>

#include <conio.h>

int q,u1;

extern int CSN(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 : “<<CSN(n);

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

 EXTRN _q:word,_u1:word

.CODE

 PUBLIC @CSN$qi

@CSN$qi  PROC

                        push BP

                        mov  BP,SP

                        mov  cx,[BP+6]        ; cx = n (lấy giá trị n từ stack)

                        mov  bx,_q                ; bx = q

                        mov  ax,_u1              ; ax = u1

                        mov  si,ax                  ; si = u1

                        dec    cx                      ; cx = n-1

    L1:

                        mul   bx                      ; ax = ui*q

                        add   si,ax                  ; si = (tổng các thành phần từ u1 đến ui-1) + ui

                        loop  L1

                        mov  ax,si                  ; ax = giá trị tổng

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

@CSN$qi  ENDP

                        END

Cách 3: Hàm Assembly có 2 đối (n, q 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 CSN(int i1,int i2);

void main(void)

{

                        int  n,q;

                        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 : “<<CSN(n,q);

                        getch();

}

Tệp Assembly:

.MODEL large

.DATA

 EXTRN  _u1:word

.CODE

 PUBLIC @CSN$qii

@CSN$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 = q (lấy giá trị d từ stack)

                        mov  ax,_u1              ; ax = u1

                        mov  si,ax                  ; si = u1

                        dec    cx                      ; cx = n-1

    L1:

                        mul   bx                      ; ax = ui*q

                        add   si,ax                  ; si = (tổng các thành phần từ u1 đến ui-1) + ui

                        loop  L1

                        mov  ax,si                  ; ax = giá trị tổng

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

@CSN$qii  ENDP

                        END

Cách 4: Hàm Assembly có 3 đối (n, q và u1 đều là tham số thực - cất vào satck)

Tệp C++:

#include <iotream.h>

#include <conio.h>

extern int CSN(int i1,int i2,int i3);

void main(void)

{

                        int n,q,u1;

                        clrscr();

                        cout<<”

Hay vao n : “; cin>>n;

                        cout<<”

Hay vao q : “; cin>>d;

                        cout<<”

Hay vao u1 : “; cin>>u1;

                        cout<<”

Tong cap so cong la : “<<CSN(n,q,u1);

                        getch();

}

Tệp Assembly:

.MODEL large

.CODE

 PUBLIC @CSN$qiii

@CSN$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 = q (lấy giá trị q từ stack)

                        mov  ax,[BP+10]      ; ax = u1 (lấy từ stack)

                        mov  si,ax                  ; si = u1

                        dec    cx                      ; cx = n-1

    L1:

                        mul   bx                      ; ax = ui 

                        add   si,ax                  ; si = (tổng các thành phần từ u1 đến ui-1) + ui

                        loop  L1

                        mov  ax,si                  ; ax = tổng cấp số nhân

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

@CSN$qiii  ENDP

                        END

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

Tags: #dương