Operácie

ASM80 programy: Rozdiel medzi revíziami

Z SensorWiki

Riadok 114: Riadok 114:
 
             HLT    ; Terminate program execution
 
             HLT    ; Terminate program execution
 
</source>
 
</source>
 +
 +
Nájdi maximum v bloku hodnôt. Prvé číslo v bloku je počet dát, nasleduje
 +
neusporiadaná množina hodnôt.
 +
 +
<source lang="asm">
 +
  ; najdi maximum v bloku hdonot
 +
 +
.org    0020H
 +
            db 03h,02h,03h,01h
 +
           
 +
            .ORG    0000
 +
            LDA    0020H
 +
            MOV    C,A ; Initialize counter
 +
            XRA    A ; Maximum = Minimum possible value = 0
 +
            LXI    H,0021H ; Initialize pointer
 +
BACK:      CMP    M ; Is number> maximum
 +
            JNC    SKIP ; Yes, replace maximum
 +
            MOV    A,M
 +
SKIP:      INX    H
 +
            DCR    C
 +
            JNZ    BACK
 +
            STA    0040H ; Store maximum number
 +
 +
            HLT    ; Terminate program execution
 +
</source>
 +
  
 
Úlohy
 
Úlohy

Verzia zo dňa a času 22:05, 1. november 2017

Nulovanie pamäťového miesta

Intuitívne MVI A,00h ale lepšie je SUB A, ktoré je kratšie a aj nastaví príznaky. Porovnajte.

myX 	equ 0010h
          
        org 0000h
        mvi a,55h
        sta myX
        sub a		;mvi a,00h
        sta myX
        hlt


Súčet dvoch 8-bitových čísel

Prvý aj druhý sčítanec sú uložené v pamäti, výsledok chceme tiež tam. Ako vieme, že výsledok je OK?

                    CISLO     EQU 0x000D 
000D                          ORG 000DH   
000D   02 03 00               DB  02H,03H,00H
   
0000                          ORG 0000   
0000                START:    
0000   3A 0D 00               LDA  000DH   
0003   47                     MOV  B,A   
0004   3A 0E 00               LDA  000EH   
0007   80                     ADD  B   
0008   32 0F 00               STA  000FH   
000B   76                     HLT
	CISLO	EQU 0x000D 
			ORG 000DH   
			DB  02H,03H,00H
   
			ORG 0000   
START:    
			LDA  000DH   
			MOV  B,A   
			LDA  000EH   
			ADD  B   
			STA  000FH   
			HLT
                LXI H, 000Dh
                MOV A,M    ; prvy scitanec
                INX H
                ADD M      ; druhy scitanec
                INX H
                MOV M,A    ; uloz vysledok
                HLT

Nájdi väčšie z dvoch čísel a ulož ho na ďalšiu pozíciu v pamäti.

            .ORG    000DH 
            DB      03H,02H,00H 

            .ORG    0000 

            LXI     H,000Dh 
            MOV     A,M 
            INX     H 
            CMP     M 
            JNC     DONE 
            MOV     A,M 
DONE:       INX     H 
            MOV     M,A 
            HLT

Inštrukcia CMP M nastaví F tak, ako keby bol obsah z M odpočítaný od obsahu A. Na rozidel od SUB však obsah Akumulátora ostáva nezmenený. Ak A je obsah Akumulátora a X je obsah M, tak F je nastavené nasledovne:

 Zero = 1   if   A = X
 Zero = 0   if   A ≠ X
Carry = 1   if   A < X
Carry = 0   if   A ≥ X

(A a X chápeme ako neznamienkové binárne čísla)


Spočítajte N čísel so začiatkom na adrese 031h, pričom ich počet je na 030h. Výsledok uložte na 040h.

            .ORG    0030h 
            DB      03h,01h,02h,03h 
            .ORG    0000 

            LDA     0030H 
            MOV     C,A ; Initialize C-counter
            SUB     A ; sum = 0
            LXI     H,0031H ; Initialize pointer
BACK:       ADD     M ; SUM = SUM + data
            INX     H ; increment pointer
            DCR     C ; Decrement counter
            JNZ     BACK ; if counter 0 repeat
            STA     040H ; Store sum

            HLT     ; Terminate program execution

Nájdi maximum v bloku hodnôt. Prvé číslo v bloku je počet dát, nasleduje neusporiadaná množina hodnôt.

  ; najdi maximum v bloku hdonot

			.org    0020H
            db		03h,02h,03h,01h
            
            .ORG    0000 
            LDA     0020H 
            MOV     C,A ; Initialize counter
            XRA     A ; Maximum = Minimum possible value = 0
            LXI     H,0021H ; Initialize pointer
BACK:       CMP     M ; Is number> maximum
            JNC     SKIP ; Yes, replace maximum
            MOV     A,M 
SKIP:       INX     H 
            DCR     C 
            JNZ     BACK 
            STA     0040H ; Store maximum number

            HLT     ; Terminate program execution


Úlohy

  1. Vynulujte 5 bajtov pamäte od 030h
  2. Odložte do pamäte na adresu 030h až 034h hodnoty 1 až 5.
  3. Vymeňte obsah pamäťových miest 030h a 033h.
  4. Sčítajte obsah pamäťových miest 032h a 033h a výsledok uložte do 034h
  5. Odčítajte od 034h 031h a zapíšte späť do 034h
  6. Nájdite dvojkový doplnok čísla z 032h