Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    vòng lặp để khởi tạo mảng bị lỗi trong lập trình asm

    tui viết lại hàm


    Mã:
             void Init(int *B, int n){                       int i;                       for(i=1; i<=n ;i++)                                 B[i]=0;                       count =0;          }
    bằng câu lệnh Asm bên dưới nhưng không hiểu sao nó không đúng theo đoạn code bằng C bên trên,bạn có thể sửa đoạn code bôi đỏ bên dưới giúp tôi đuowjc không

    Mã:
    #include <stdio.h>#include <stdlib.h>#include <conio.h>#define MAX 100#define TRUE            1#define FALSE            0int Stop, count;void Init(int *B, int n){    __asm{        mov ecx,n;        lea edi,B;        cld;dat df =0start:        add edi,4;        mov dword ptr [esi],0        loop start;    }    count =0;}void Result(int *B, int n){    int i;count++;    printf("
     Xau nhi phan thu %d:",count);    for(i=1; i<=n;i++)          printf("%3d", B[i]);}void Next_Bits_String(int *B, int n){    int i = n;    while(true){        if (i<=0 || B[i]==0)/eu i <=0 hoac B[i] ==0 thi dung vong lap lai        {            break;        }        B[i]=0; i--;    }    if(i==0 )/eu i==0 tuc la da duyet xong toan bo cac cau hinh        Stop=TRUE;    else            B[i]=1;} void Generate(int *B, int n){    Stop = FALSE;    while (!Stop) {         Result(B,n);        Next_Bits_String(B,n);    }}void main(void){    int  *B, n;//clrscr();    printf("
     Nhap n=");scanf("%d",&n);    B =(int *) malloc(n*sizeof(int));    Init(B,n);Generate(B,n);    //free(B);getch();}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Có phải cậu nhầm lẫn edi và esi ko?
    edi khi vào vòng lặp thì tui nghĩ edi+4 phải sau lệnh mov, vì cậu move vào địa chỉ sau đó mới tăng lên chứ nhỉ?

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •