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 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    dl hay là edx? , lodsb là load 1 byte 1 lần thôi, mảng a mỗi phần tử 4 byte lận

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc thanh ghi eax,edx so với thanh ghi ax

    Mình có bài tập tìm phần tử max trong 1 mảng giải bằng dos 16bit như thế này



    Mã:
    .Model small.Stack 100H.Data                ; source stringlist DB 1,4,0,9,7,2,4,6,2,5   .codemain proc               ; initilize the ds and es registers    mov ax, @Data    mov ds,ax        cld    mov cx, 9                             lea si, list    ; si points to list    mov bl, [si]    ; max <-- 1st element    inc siStart:    lodsb            cmp al, bl    jle BYPASS    mov bl, al; al>bl --> bl to store new max    BYPASS:    loop Start       ; print the max    add bl, '0' ; digit to char    mov dl,bl    mov ah, 2    int 21H    ; end program    mov ah, 4CH    int 21Hmain endp                              end main
    nhưng sang 32bit thì các thanh ghi thay đổi,nhưng sao thanh ghi eal không chứa giá trị được lodsb của esi à,tại sao mình làm tư duy giống bài trên mà không được

    Mã:
    #include <stdio.h>int main(){    int A[10]= { 1,2,4,5,6,3,2,3,9,6};    int maxA = 0;    __asm    {        lea esi,A        mov ecx, 10;         mov edl,[esi];lay thanh ghi edl lam thanh ghi trung gian chua cac gia tri max trung gian        inc esistart:        lodsb        cmp eal,edl        jl TiepTucVongLap        mov edl, ealTiepTucVongLap:        loop start        mov maxA,edx    }    printf("Phan tu max: %d
    ",maxA);    return 0;}

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    tư duy theo cách của quangnh89


    Mã:
    #include <stdio.h>int main(){    int A[10]= { 1,2,4,5,6,3,2,3,9,6};    int maxA = 0;    __asm    {        lea esi,A            mov ecx, 10;         mov dl,[esi];lay thanh ghi edl lam thanh ghi trung gian chua cac gia tri max trung gian            inc esistart:        lodsb            cmp al,dl            jl TiepTucVongLap            mov dl, alTiepTucVongLap:        loop start        mov maxA,edx    }    printf("Phan tu max: %d
    ",maxA);    return 0;}
    Trích dẫn Gửi bởi whitepenguin
    dl hay là edx? , lodsb là load 1 byte 1 lần thôi, mảng a mỗi phần tử 4 byte lận
    vậy thì chắc là Mình làm sai rồi bạn nhỉ,hàm lodsb chỉ load được có 1 byte 1 lần,vậy muốn load 4 byte 1 lần để so sánh nhằm tìm ra max của mảng thì phải làm thế nào bạn

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
            mov edx,dword ptr [esi];lay thanh ghi edl lam thanh ghi trung gian chua cac gia tri max trung gian        add esi, 4start:        mov eax, dword ptr [esi]        add esi, 4        cmp eax, edx        jl TiepTucVongLap        mov edx, eaxTiepTucVongLap:        loop start        mov maxA,edx

 

 

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
  •