User Tools

Site Tools


isu:cv07

[ISU] 7. Základní řídící konstrukce

cv7_A.asm ukázka

cv7_A.asm
; UKÁZKA jumpů
 
%include "rw32.inc"
 
section .data
    aa    db  15
    bb    db  42
 
section .text
main:
    mov al, [aa]
    mov bl, [bb]
    jmp .soucet
.pokracuj1:
    nop
    jnz .nasobeni
.pokracuj2:
    nop
    jmp .posledni
 
.soucet:
    add al, bl
    jmp .pokracuj1
 
.nasobeni:
    mul bl
    jmp .pokracuj2
 
.posledni:
    call WriteUInt16NewLine
    ret

cv7_1.asm

cv7_1.asm
%include "rw32.inc"
 
; Načti dvě znaménková čísla z paměti, porovnej je a vypiš do terminálu string říkající,
; které číslo je větší podle výsledku porovnání (např. var1 > var2).
 
section .data
    ; definuj var1, var2, strBigger, strSmaller
 
section .text
main:
    ; načtení proměnných do registrů
    ; porovnání hodnot
    ; podmíněný skok na návěští, kde se nastaví "source index" na string
    ; z návěští pak nepodmíněný skok na návěští ".end"
 
.bigger:
    ;
 
.smaller:
    ;
 
.end:
    ; vypiš string
    ret

cv7_1.asm jedno z mnoha řešení

cv7_1.asm jedno z mnoha řešení

cv7_1.asm
%include "rw32.inc"
 
; Načti dvě znaménková čísla z paměti a vypiš do terminálu string říkající,
; které číslo je větší podle výsledku porovnání (např. var1 > var2).
 
section .data
    ; definuj var1, var2, strBigger, strSmaller
    var1       db  201
    var2       db  200
    strBigger  db  "var1 > var2", 0
    strSmaller db  "var1 < var2", 0
 
section .text
main:
    ; načtení proměnných do registrů
    mov al, [var1]
    mov ah, [var2]
    mov ecx, 11  ; WriteString ignoruje 0, chyba HUBu
 
    ; porovnání hodnot if ( var1 > var2 )
    cmp al, ah
    ; podmíněný skok na návěští
    jng .smaller  ; (jump if not greater)
 
.bigger:
    mov esi, strBigger
    jmp .end
 
.smaller:
    mov esi, strSmaller
    jmp .end
 
.end:
    ; vypiš string
    call WriteStringASCIIZNewLine ; WriteStringNewLine
    ret


cv7_2.asm

cv7_2.asm
; Načti dvě znaménková 8-bit čísla a proveď jejich součet.
; Pokud došlo k přetečení, vypiš nějakou hlášku a skonči.
; Pokud je výsledek záporný, obrať číslo na kladné (absolutní hodnota).
; Vypiš výsledek.

cv7_B.asm ukázka

cv7_B.asm
; Ukázka cyklů
%include "rw32.inc"
 
section .text
main:
    mov eax, 3
 
.for:
    cmp eax, 0
    jz continue
    call WriteUInt32
    dec eax
    jmp .for
 
continue:
    call WriteNewLine
 
    mov ebx, 0      ; EBX = pocatecni hodnota sumy
.dowhile:
    call ReadInt32_Silent  ; EAX = vstup
    add ebx, eax    ; suma = suma + vstup
.condition:
    cmp eax, 0      ; porovnanim nastavime priznaky
    jne .dowhile    ; pokud vstup nebyl 0 tak se cyklus bude opakovat
 
enddowhile:
    mov eax, ebx    ; EAX = suma
    call WriteInt32NewLine
 
forloop:
    mov ecx, 3
.cycle:
    shl eax, 1
    loop .cycle    ; ECX--, jnz
end:
    call WriteInt32NewLine
    ret

cv7_3.asm

cv7_3.asm
; Procházej prvky v poli a kladné čísla vypisuj jako znak (WriteChar).
; Konec pole je označen prvkem s hodnotou nula.
 
section .data
    num dd 73,-5,83,-85,85,-101,-401,32,106,-1,101,32,66,-1,64,-1,90,73,-44,0,73,-4,99,72,0

cv7_3.asm jedno z mnoha řešení

cv7_3.asm jedno z mnoha řešení

cv7_3.asm
%include "rw32.inc"
; Procházej prvky v poli a kladné čísla vypisuj jako znak (WriteChar).
; Konec pole označen prvkem s hodnotou nula.
 
section .data
    num dd 73,-5,83,-85,85,-101,-401,32,106,-1,101,32,66,-1,64,-1,90,73,-44,0,73,-4,99,72
 
section .text
main:
    mov ecx, 0
.while:
    mov eax, [num+ecx*4]
    inc ecx
    cmp eax,0
    jz .end   ; nula -> break
    cmp eax,0
    js .while  ; zaporne cislo -> continue
    call WriteChar
    cmp eax,0
    jnz .while
.end:
    call WriteNewLine
    ret


cv7_4.asm

cv7_4.asm
; Vykresli čtverec z hvězdiček.
; Od uživatele načti číslo n=<2;10>
; Pomocí cyklů vykresli rámeček z hvězdiček o velikosti n.
; Např. pro n=4
; ****
; *  *
; *  *
; ****

cv7_C.asm ukázka

cv7_C.asm
; Ukázka zásobník
%include "rw32.inc"
 
section .data
    num dd 99
 
section .text
main:
    mov eax, 55
    push eax
    push 4
    push dword [num]
    nop
    pop eax
    pop eax
    pop dword [num]
    ret

cv7_5.asm

cv7_5.asm
%include "rw32.inc"
 
section .data
    pole dd 4, 8, 15, 16, 23, 42
 
section .text
main:
    mov ecx, 6
    ; Bez použití registrů (vyjímkou ECX pro cyklus)
    ; proveď reverzi prvků v poli pomocí zásobníku.
 
 
    ret

cv7_5.asm jedno z mnoha řešení

cv7_5.asm jedno z mnoha řešení

cv7_5.asm
%include "rw32.inc"
 
section .data
    pole dd 4, 8, 15, 16, 23, 42
 
section .text
main:
    mov ecx, 6
    ; Bez použití registrů (vyjímkou ECX pro cyklus)
    ; proveď reverzi prvků v poli pomocí zásobníku.
 
.load:
    push dword [pole+(ecx-1)*4]
    loop .load
 
    mov ecx, 6
.unload:
    pop dword [pole+(ecx-1)*4]
    loop .unload
 
    ret


isu/cv07.txt · Last modified: 2024/03/22 15:44 by sakin