User Tools

Site Tools


isu:cv03

[ISU] 3. Paměť, pole

cv3_0.asm ukázka

cv3_0.asm
; UKÁZKA
; Do x ulož hodnotu 12 a vypočítej a+b+x
 
%include "rw32.inc"
 
section .data
    pA db 5       ; char  A = 5;   char *pA = &A;
    pB dw 100     ; short B = 100; char *pB = &B;
    pC dd 2000    ; long  C = 2000;
 
section .bss
    x resd 1
 
section .text
main:
    mov [x], dword 12
    mov eax, 0
    mov ax, [pB]
    add eax, [pC]
    mov [x], eax
    call WriteUInt32
    call WriteNewLine
    ret

cv3_1.asm

cv3_1.asm
; Vypočítej obvod obdélníku s 8b a 16b hodnoty v paměti.
 
%include "rw32.inc"
 
section .data
    a ?? 300  ; definuj velikost
    b ?? 200  ; definuj velikost
 
section .text
main:
    ; zde prosím výpočet
 
    call WriteUInt32
    call WriteNewLine
    ret

cv3_1.asm jedno z mnoha řešení

cv3_1.asm jedno z mnoha řešení

cv3_1.asm
; Vypočíte obvod obdélníku s 8b a 16b hodnoty v paměti.
 
%include "rw32.inc"
 
section .data
    a dw 300  ; definuj velikost
    b db 200  ; definuj velikost
 
section .text
main:
    mov eax, 0
    mov edx, 0
 
    mov dl, [b]
    add ax, dx
    add ax, dx  ; 2*b
 
    mov dx, [a]
    add eax, edx
    add eax, edx  ; 2*a
 
    call WriteUInt32
    call WriteNewLine
    ret


cv3_2.asm

cv3_2.asm
; Vypočítej obvod trojúhelníku.
; Postupně načti od uživatele všechny tři strany: 8-bit, 16-bit, 32-bit čísla.
; OMEZENÍ: Máš k dispozici pouze jediný registr EAX, využij neinicializované proměnné.
 
%include "rw32.inc"
 
section .bss
    ; něco zde
 
section .text
main:
    ; tvůj kód zde
 
    call WriteUInt32
    call WriteNewLine
    ret

cv3_2.asm jedno z mnoha řešení

cv3_2.asm jedno z mnoha řešení

cv3_2.asm
; Vypočítej obvod trojúhelníku.
; Postupně načti od uživatele všechny tři strany: 8-bit, 16-bit, 32-bit čísla.
; OMEZENÍ: Máš k dispozici pouze jediný registr EAX, využí neinicializované proměnné.
 
%include "rw32.inc"
 
section .bss
    a resb 1
    b resw 1
    c resd 1
 
section .text
main:
    mov eax, 0
    call ReadUInt8_Silent
    mov [a], al
    call ReadUInt16_Silent
    mov [b], ax
    call ReadUInt32_Silent
    mov [c], eax
 
    mov eax, 0
    add al, [a]
    add ax, [b]
    add eax, [c]
 
    call WriteUInt32
    call WriteNewLine
    ret


cv3_3.asm ukázka

cv3_3.asm
; UKÁZKA
; Práce s polem
%include "rw32.inc"
 
section .data
    pA  db  5       ; char  A = 5; char *pA = &A;
    pB  dw  1000    ; short B = 5; char *pB = &B;
    pC  dd  200000  ; long  C = 5;
 
    arrA db 11, 22, 33, 44, 55          ; char  arrA[5] = {11,22,33,44,55}; pole bytů s 5 prvky
    arrB dw 222, 444, 666, 888          ; short arrB[4]
    arrC dd 0x12345, 0xCAFE, 6969, 911  ; long  arrC[4]
    stri db "aloha",0
 
section .text
main:
    mov eax, 0
    mov al, [arrA + 0]
    mov al, [arrA + 1]
    mov al, [arrA + 2]
    mov al, [arrA + 3]
    mov al, [arrA + 4]
    nop
    mov ax, [arrB + 0]
    mov ax, [arrB + 2]
    mov ax, [arrB + 4]
    mov ax, [arrB + 6]
    nop
    mov ax, [arrB + 8]  ; ?
    mov ax, [arrB + 10]  ; ??
    mov ax, [arrB + 12]  ; ???
 
    ret

cv3_4.asm

cv3_4.asm
; Vypočítej hodnotu z prvků v polích
%include "rw32.inc"
 
section .data
    arrB db 9, 4, 1010b, 125, 17
    arrD dd 1234, 0x202, 6969, 911
    strFinal db "Done",0
 
section .text
main:
    mov eax, 0
    ; EAX = arrD[3] + arrB[2] - arrD[1] + arrB[4]
 
 
    ; tyto řádky nemodifikuj
    call WriteUInt32
    call WriteNewLine
    mov esi, strFinal
    call WriteStringASCIIZ
    call WriteNewLine
    ret

cv3_4.asm jedno z mnoha řešení

cv3_4.asm jedno z mnoha řešení

cv3_4.asm
; Vypočítej hodnotu z prvků v polích
%include "rw32.inc"
 
section .data
    arrB db 9, 4, 1010b, 125, 17
    arrD dd 1234, 0x202, 6969, 911
    strFinal db "Done",0
 
section .text
main:
    mov eax, 0
    ; EAX = arrD[3] + arrB[2] - arrD[1] + arrB[4]
    mov edx, 0
    mov eax, [arrD+4*3]
    mov dl, [arrB+1*2]
    add eax, edx
    sub eax, [arrD+4*1]
    mov dl, [arrB+1*4]
    add eax, edx
 
    ; tyto řádky nemodifikuj
    call WriteUInt32    ; 424
    call WriteNewLine
    mov esi, strFinal
    call WriteStringASCIIZ
    call WriteNewLine
    ret


cv3_5.asm

cv3_5.asm
; Vytvoř neinicializované pole a od uživatele do něj načti 5 znaků.
; Znaky přeskládej do opačného pořadí a vypiš na výstup.
; Např.:  ABCDE -> EDCBA
%include "rw32.inc"
 
section .bss
    ; něco zde
 
section .text
main:
    mov eax, 0
    ; tvůj kód zde
 
    ret

cv3_5.asm jedno z mnoha řešení

cv3_5.asm jedno z mnoha řešení

cv3_5.asm
Mnoho přístupů:
 - načíst celý řetězec s "ReadString" a přesunout symboly do druhého pole
 - načítat po znaku s "ReadChar" a rovnou skládat převráceně do výstupního pole

isu/cv03.txt · Last modified: 2025/02/27 16:19 by sakin