isu:cv05
Table of Contents
[ISU] 5. Logické instrukce
- Moodle: Podklady ke cvičení 5 (IS VUT)
- Přednáška: 5. posuny a rotace, předávání řízení
- Assembler Cheat Sheet IntelCodeTable.pdf
- Slides cvika: Sakin, Marta Jaroš
cv5_1.asm
- cv5_1.asm
%include "rw32.inc" section .text main: ; Rozdíl mezi NOT a NEG - ukázka v debuggeru mov eax, 0 mov ah, byte 5 neg ah mov al, byte 5 not al mov ax, 0x00AA ; Převeď 0xAA -> 0xAC jen pomocí NOT a NEG ; Zapni si v debbugeru náhled HEX a BIN formátu ;) ret
cv5_A.asm ukázka
- cv5_A.asm
; ukázka TEST, AND, OR, XOR %include "rw32.inc" section .text main: xor eax, eax xor ebx, ebx mov al, 0b11100101 mov bl, 0b10011001 nop test al, bl ; TEST == AND nop ; maskovani, jen spolecne jednickove bity and al, bl nop mov al, 0b01010101 or al, bl ; aspon jedna jednicka xor al, 5 ; 0b00000101 nop xor eax, eax ; vynulovani ret
cv5_2.asm
- cv5_2.asm
; Úkol - Zašifrování zprávy ; * Definuj si proměnnou klíč (číslo) a krátký text (4 symboly) ; * Krátký text načti z paměti do registru (nebo pracuj přímo v paměti) ; * Proveď zašifrování (xor), ulož/přepiš proměnnou a vypiš ; * Následně zašifrovaný text dešifruj a opět vypiš ; Libovolně můžete přidat další instukce pro větší zabezpečení %include "rw32.inc" section .data key XX XXX ; your key txt db "AHOJ",0 ; 4 symbols text + 0 section .text main: ; your code mov esi, txt call WriteStringASCIIZNewLine ret
cv5_B.asm ukázka
- cv5_B.asm
; Shifty ukázka %include "rw32.inc" section .text main: mov eax, 0xE555 ; SHR - posun v rámci paměťového místa/registru dopRava shr ax, 1 shr ax, 1 shr ax, 1 shr ax, 3 nop ; SHL - posun v rámci paměťového místa/registru doLeva shl ax, 1 shl ax, 1 shl ax, 1 shl ax, 3 nop mov ax, 0xF5F5 ; SAR - aritmetický posun v rámci paměťového místa/registru dopRava sar ax, 1 sar ax, 1 sar ax, 1 sar ax, 3 nop ; SAL - aritmetický posun v rámci paměťového místa/registru doLeva sal ax, 1 sal ax, 1 sal ax, 1 sal ax, 3 nop xor eax, eax ; 128 / 2^3 = 128 / 8 = 16 mov ax, 128 shr ax, 3 nop ; 8 * 2^5 = 8 * 32 = 256 mov ax, 8 shl ax, 5 nop ret
cv5_3.asm
- cv5_3.asm
; Využíj instrukce posuvu pro násobení a dělení ; 0) Definuj 16b pole 'res' se třemi prvky (všechny hodnoty nastav 0) ; 1) Nahraj do 16b registru konstantu 100 ; 2) Číslo vyděl 2 pomocí logické instrukce posuvu (100/2) ; 3) Výsledek ulož do res[0] ; 4) Získané číslo vynásob 8 pomocí logické instrukce ; 5) Výsledek ulož do res[1] ; 6) Získané číslo zneguj a vyděl číslem 4 - pozor na zachovaní znaménka! ; 7) Výsledek ulož do res[2] ; 8) Všechny čísla z res sečti a výsledek vypiš do terminálu
cv5_C.asm ukázka
- cv5_C.asm
; ukázka rotace (v cyklu) %include "rw32.inc" section .text main: xor eax, eax mov ecx, 6 ; počet cyklů mov al, 0b00010111 .cyklusL: rol al, 1 ; change ROL -> RCL loop .cyklusL nop mov ecx, 6 ; počet cyklů mov al, 0b00010111 .cyklusR: ror al, 1 ; change ROR -> RCR loop .cyklusR nop ret
cv5_4.asm
- cv5_4.asm
%include "rw32.inc" section .text main: mov eax, 0xAABBCCDD ; Přesun 8-bitových bloků (pomocí rotace), vypiš s WriteHex32 ; EAX |a0|a1|a2|a3| ; EAX |a3|a1|a0|a2| ret
cv5_D.asm ukázka
- cv5_D.asm
; ukázka JUMPu %include "rw32.inc" section .data print_nop db "Bez preteceni", 0 print_cf db "Preteceni!", 0 section .text main: ; ukazka - jump if carry mov al, 255 ; 255 -> 2 add al, 5 jc preteceni pokracuj: mov esi, print_nop jmp konec konec: call WriteString call WriteNewLine ret preteceni: mov esi, print_cf jmp konec
cv5_5.asm
- cv5_5.asm
; Úkol 5 - Zašifrování zprávy - vylepšení úkolu 2 ; * Definuj si proměnnou klíč (číslo) ; * Definuj si proměnnou s řetězcem ; * Nastav ukazatel na řetězec do ESI ; * Zašifruj řetězec symbol po symbolu (můžeš přepsat originál) ; * Využí nějaký způsob cyklu na průchod symboly %include "rw32.inc" section .data key db 240 st db "ILoveISU",0 n db 8 section .text main: xor eax, eax ; your code ret
cv5_6.asm
- cv5_6.asm
; Úkol 6 ; Definuj pole 'pole' o velikosti byte s více jak 5 prvky (libovolné hodnoty) ; Definuj proměnnou s počtem prvků (musíš ručně spočítat/zadat) ; Výpočítej průměrnou hodnotu pole 'pole' ; Využí skákání na návěští, v ECX dekrementuj počet cyklů
isu/cv05.txt · Last modified: 2025/03/13 10:43 by sakin