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

Tags: #dương