Új hozzászólás Aktív témák
-
zka67
őstag
válasz
kemkriszt98
#357
üzenetére
Szia, először is:
mov al,"a"Ha elolvasod a BIOS funkció paraméterét, te is láthatod, hogy az csak egy karaktert ír ki a TTY-ra, mégpedig azt, ami az AL regiszterben van. Ha jól emlékszem, akkor a BH és BL regisztereket is be kell állítani, mielőtt meghívod a 10h megszakítást. (BH=page, BL=color).
Használhatod helyette a DOS hívásokat, INT 21h
Function 2h: Display Output. Outputs the character in DL to the standard output device.
Input: AL = 02h, DL = character
Output: noneSzöveg kiírásához pedig ezt:
Function 09h: Print String. Outputs the characters in the print string to the standard output device.
Input: AH=09h, DS
X = pointer to the character string ending with '$'
output: noneorg 0x7c00
mov dl,"a"
call print
jmp $
print:
mov ah,2
int 21h
ret
org 0x7c00
mov dx,MSG
call print
jmp $
print:
push ds
mov ax,cs
mov ds,ax
mov ah,9
int 21h
pop ds
ret
MSG:
db "Alma$" -
zka67
őstag
válasz
szucs.miki
#351
üzenetére
Megszorzod 10-zel az eredményt, ha túlcsordulás van (CY vagy OV attól függően, hogy előjel nélküli vagy előjeles számról beszélünk), akkor nem fért bele. A következő lépésben hozzáadod az új karakter értékét, és ha túlcsordulás van, nem fért bele. Ezt a két lépést ismétled addig, amíg a számod összes karakterét fel nem dolgoztad. Az eredményt az elején természetesen nullázod, és ha előjeles számról van szó és negatív, azt is pozitív számként kezeled és csak a végén negálod meg.
-
zka67
őstag
válasz
Dark Archon
#329
üzenetére
Van egy nagyon jó ingyenes program a 8051-es mikrokontroller családhoz, amivel az áramkör megépítése nélkül ki is tudod próbálni a programod működését. Turbo Pascal-ban és Assembler-ben is tudsz vele programot írni, van benne szimulátor, debugger, terminál, oszcilloszkóp meg még rengeteg hasznos dolog.
-
zka67
őstag
válasz
CPT.Pirk
#305
üzenetére
Az átlagolásod lényegesen egyszerűbben és gyorsabban is megoldható. Ez a szép az assembly nyelvben, hogy többféleképpen is meg lehet írni ugyanazt a programot, csak meg kell tornáztatni az agyat egy kicsit.
dseg
org $0030
adat_buff: ds 16
atlag: ds 2
cseg
;------------------------------------------------------------------------------
; atlagolas - adat_buff atlagolasa.
;
; input: adat_buff, 16 db 8 bites adattal
; output: atlag, a 16 db 8 bites szam atlaga
;
; felhasznalt regiszterek:
; B - temp osszeg felso byte
; A - temp osszeg also byte
; R0- buffer pointer
;------------------------------------------------------------------------------
atlagolas: clr a ;temp[16] = 0
mov b,a
mov R0,#adat_buff ;buffer elejere all
_1: add a,@R0 ;temp[lo] += adat
jnc _2 ;tulcsordult?
inc b ;ha igen, temp[hi] += 1
_2: inc R0 ;kovetkezo adatra all
cjne R0,#adat_buff+16,_1 ;mindet osszeadta?
;BA shiftelese jobbra 4 bittel (osztas 16-al)
;mivel 16 db 8 bites szamot ad ossze, ezert B felso 4 bitje
;biztosan nulla es A also 4 bitjere pedig nincs szukseg
swap a ;temp[lo] felso negy bit
anl a,#0Fh ;lesz az eredmeny also 4 bitje
mov atlag,a
mov a,b ;temp[hi] also negy bit
swap a ;lesz az eredmeny felso 4 bitje
orl atlag,a
retA 16-al való osztást elmagyarázom, ha nem értenéd. Itt arról van szó, hogy 16*255 nem lehet nagyobb mint 0FF0h. Tehát a felső bájt felső négy bitje mindig nulla lesz, ezt ki is használom a programban az ORL utasításban, nem kell ugyanis kimaszkolni. Az alsó bájt alsó négy bitjére nincs szükség, azt törlöm az ANL utasítással. A SWAP utasítás megcseréli az alsó és a felső négy bitet. Mivel az összeg alsó és felső bájtjából is csak 4-4 bitre van szükség, így ez kiváló megoldás a shiftelés helyett.
A második feladatodat nem értem. Ha leírod pontosan a feladatot, akkor szívesen segítek.
Új hozzászólás Aktív témák
- exHWSW - Értünk mindenhez IS
- Linux kezdőknek
- Google Pixel 10a – évismétlés
- Elektromos autók - motorok
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Akciókamerák
- Anime filmek és sorozatok
- Milyen légkondit a lakásba?
- Világrekordot ünnepel az ASRock
- Ilyen olcsó sem volt még egy Apple notebook
- További aktív témák...
- AKCIÓ! LENOVO ThinkPad P15 Gen2 munkaállomás - i7 11800H 64GB DDR4 1TB SSD RTX A2000 4GB W
- Lenovo L14 Ryzen 5 4500U Refurbished - Garancia!
- RÉSZLETRE .OPCIONÁLIS. G.SKILL Trident Z5 Neo RGB 96GB (2x48GB) DDR5 6000MHz
- BESZÁMÍTÁS! Sony PlayStation 4 PRO 1TB fekete játékkonzol extrákkal garanciával hibátlan működéssel
- GYÖNYÖRŰ iPhone 14 Pro 128GB Deep Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS4649
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
X = pointer to the character string ending with '$'
