Tong cap so cong (asm c++)

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

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