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

Tags: