Ú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
- Videó stream letöltése
- Honor 50 - apám nevében
- Horgász topik
- Samsung kuponkunyeráló
- iPhone topik
- A fociról könnyedén, egy baráti társaságban
- Hamarosan körbefotózza a Google a Balatont
- Elektromos autók - motorok
- Kormányok / autós szimulátorok topikja
- Samsung Galaxy S23 Ultra - non plus ultra
- További aktív témák...
- LG UltraGear 32GS85Q-B - 31,5" NANO IPS QHD 180Hz
- CYBERLAB Telefon szerviz kijelzőcsere, akkucsere, javítás Oroszlány
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- Apple iPhone 13 128GB, Kártyafüggetlen, 1 Év Garanciával
- LG UltraGear 32GS95UX-B Monitor 4K-240hz/ Fhd-480hz 2ÉV GYÁRTOI GARANCIA!!!
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Azonnali készpénzes Intel i3 i5 i7 i9 12/13/14 gen processzor felvásárlás személyesen / csomagküldés
- Jó ÁRON ELADÓ! Üzleti HP Elitebook 1040 G9 Laptop! / i5-1245U 16GB 256GB FHD
- HIBÁTLAN iPhone 12 Pro 256GB Graphite-1 ÉV GARANCIA - Kártyafüggetlen, MS4518, 100% Akksi
- Samsung Galaxy S22 Ultra 12/512GB // Számla // Garancia //
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
X = pointer to the character string ending with '$'
