Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Asembler, kilka pytań do opisu kodu

pawelkarawan 02 Kwi 2011 23:09 1471 2
  • #1 02 Kwi 2011 23:09
    pawelkarawan
    Poziom 2  

    Code:
    .386
    
    .model flat, stdcall
    option casemap: none

    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    include \masm32\include\user32.inc
    includelib \masm32\lib\user32.lib

    .data
    tytul db ' Asembler' , 0
    dane db '987654321', 0
    min db '?',0   /[b]Dlaczego w apostrofach jest  '0'[/b]
    max db '?',0

    .code
    start:
     xor esi,esi   /[b]Dlaczego zerujemy rejestr ESI??[/b]
     mov al,byte ptr dane[esi]
     mov byte ptr min, al / [b]Co oznacza ten zapis??[/b]
    et1:
      mov al, byte ptr min
      inc esi
      mov ah, byte ptr dane[esi]
      cmp ah, '$' / [b]Co oznacza ze porownujemy ze znaczkiem dolara?[/b]
      je koniec
      cmp al,ah
      jb et2
      mov byte ptr min, ah
      jmp et1

     et2:
       mov byte ptr min, al
       jmp et1
     

    koniec:
      invoke MessageBox, NULL, addr min, addr tytul, MB_OK
      invoke ExitProcess, NULL
    end start

    0 2
  • #3 03 Kwi 2011 09:12
    Dżyszla
    Poziom 42  

    1. Gdzie w apostrofach jest 0?
    2. Myślę, że jakbyś wiedział, do czego służy rejestr (E)SI, to by nie było pytania. Ponadto przecież w następnej linijce go wykorzystujesz.
    3. mov byte ptr min, al - przeniesienie bajtu danych do zmiennej min z rejestru AL. Moim zdaniem zupełnie niepotrzebne w tym miejscu stosowanie wskazania rozmiaru danych. Tego typu zapis częściej wykorzystuje się przy adresacji wskaźnikowej.
    4. Dokładnie to, że porównujemy ze znakiem '$'. Jednym z poleceń procesora jest przetwarzanie ciągów znakowych aż do napotkania znaku '$', dlatego wykorzystuje go się jako znak końca ciągu. W podanym przykładzie prawdopodobnie źle zadeklarowano zmienne, albo źle określono warunek. Deklaracja zmiennych tekstowych bardziej przypomina Windosowy NULL-Terminated String od "String" a stosowanego w ASM - $-Terminated.

    0