Készítsen VIZSGA3.COM programot, amely a képernyő bal felső sarkában megjeleníti az egérgombok pillanatnyi állapotát. Azaz a "bal", "jobb", "mindkettő", "egyik sem" szövegeket írja ki, attól függően, hogy éppen melyik gomb van lenyomva. Kilépés: ha az egérkurzort a bal felső sarokba visszük! code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ax,1 int 33h mov si,5 ciklus: mov ax,3 int 33h and cx,-8 and dx,-8 add cx,dx cmp cx,0 jz kilep cmp bx,si jz ciklus ; ha nem valtozott akkor vissza az elejere mov si,bx cmp bx,1 mov dx,offset bal jz kiir cmp bx,2 mov dx,offset jobb jz kiir cmp bx,3 mov dx,offset mind2 jz kiir mov dx,offset egyikse kiir: mov ax,2 int 33h mov ah,9 int 21h mov ax,1 int 33h jmp ciklus kilep: mov ah,4ch int 21h bal db 'bal ',8,8,8,8,8,8,8,8,8,'$' jobb db 'jobb ',8,8,8,8,8,8,8,8,8,'$' mind2 db 'mind2 ',8,8,8,8,8,8,8,8,8,'$' egyikse db 'egyik sem',8,8,8,8,8,8,8,8,8,'$’
Készítsen "ELDONT.COM" Assembly programot, amely 1. letörli a képernyőt, 2. kiírja: "Üssön le maximum 10 betűt vagy számot, Esc, Q, q - vége!",
3. és a leütött billentyűket megvizsgálja, betű, vagy szám és kiírja a képernyőre. A program a 10. leütött billentyűre, Esc-re, "q"-ra vagy "Q"-ra érjen véget (amelyik előbb bekövetkezik). code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov dx,offset msg mov ah,9 int 21h mov cx,10 ciklus: mov ah,8 int 21h cmp al,27 jz kilep cmp al,'Q' jz kilep cmp al,'q' jz kilep mov ah,2 mov dl,al int 21h or al,32 ; kisbetusse convertal cmp al,'z' ja semmi cmp al,'a' mov dx,offset betu jae kiir cmp al,'9' ja semmi cmp al,'0' jb semmi mov dx,offset szam kiir: mov ah,9 int 21h semmi: loop ciklus kilep: mov ah,4ch int 21h msg db 'Usson le max 10 betut vagy szamot, Esc,Q,q - vege',13,10,'$' betu db '-betu',13,10,'$' szam db '-szam',13,10,'$' code
ends end
start
Készítsen VIZSGA3.COM programot, amely képernyőtörlés után elszámol 99-től l-ig (visszafelé). A számokat egyesével írja ki, egymás alá, várjon egy billentyű leütésére és Esc-re azonnal érjen véget. code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov int mov mov ciklus: mov div cmp jz add mov push mov int pop kicsi: add mov mov int
ax,3 10h cx,99 bl,10 ax,cx bl al,0 kicsi al,'0' dl,al ax ah,2 21h ax ah,'0' dl,ah ah,2 21h
mov dx,offset crlf mov ah,9 int 21h loop ciklus mov ah,8 int 21h mov ah,4ch int 21h crlf db 13,10,'$' code ends end start
Készítsen "SZIA.COM" Assembly programot, amely 1. letörli a képernyőt, 2. megkérdezi "Hogy hívnak?" és bekér egy nevet, amely: code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ah,9 mov dx,offset whoru int 21h mov cx,10 mov di,offset nev ciklus: mov ah,8 int 21h cmp al,13 jz vege mov [di],al inc di mov ah,2 mov dl,al int 21h loop ciklus vege: cmp cx,10 mov ah,9 jz hiba mov dx,offset szia int 21h mov dx,offset nev int 21h jmp kilep hiba: mov dx,offset hibas int 21h kilep: mov ah,4ch int 21h whoru db 'Hogy hivnak? $' nev db '$$$$$$$$$$$' szia db 13,10,'Szia, $' hibas db 13,10,'Nem irtal be semmit!$' code
ends end
start
Készítsen "KERET.COM" Assembly programot, amely letörli a képernyőt és egy "O" betűkből álló keretet rajzol a képernyőre, majd kilép DOS-ba. A rajzolást ciklusokkal oldja meg, ne egy az egyben történő, O betűket és szóközöket tartalmazó string kiíratásával! code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ax,0b800h mov es,ax xor di,di mov cx,30 mov bx,20*80*2 vizszintes: mov byte ptr es:[di],'o' add di,bx mov byte ptr es:[di],'o' sub di,bx inc di inc di loop vizszintes xor di,di mov cx,21 mov bx,30*2 fuggoleges: mov byte ptr es:[di],'o' add di,bx mov byte ptr es:[di],'o' sub di,bx add di,160 loop fuggoleges
code
mov int ends end
ah,4ch 21h start
Készítsen "NEHANY.COM" Assembly programot, amely 1. letörli a képernyőt, 2. udvariasan bekér egy egyjegyű számot és egy karaktert, és a karaktert annyiszor kiírja a képernyőre code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov mov int mov int cmp jz xor mov sub
ah,9 dx,offset msg1 21h ah,1 21h al,13 hiba cx,cx cl,al cl,'0'
mov dx,offset msg2 mov ah,9 int 21h mov ah,1 int 21h cmp al,13 jz hiba mov bl,al mov ah,2 mov dl,13 int 21h mov dl,10 int 21h mov dl,bl ciklus: int 21h loop ciklus jmp kilep hiba: mov dx,offset hibas mov ah,9 int 21h kilep: mov ah,4ch int 21h msg1 db 'Kerek egy szamot: $' msg2 db 13,10,'Kerek egy karaktert: $' hibas db 'Nem irtal be semmit!$' code ends end start
Készítsen "KIIR3.COM" Assembly programot, amely letörli a képernyőt és kiírja az "Assembly" szót a következőképpen: A As Ass… code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h xor bx,bx ciklus: inc bx mov cx,bx mov ah,2 mov si,offset msg kiir: lodsb ; = mov al,[si++] mov dl,al int 21h loop kiir mov dx,offset crlf mov ah,9 int 21h cmp bx,8 jnz ciklus kilep: mov ah,4ch int 21h msg db 'Assembly' crlf db 13,10,'$' code ends end start
Készítsen VIZSGA3.COM programot. A felhasználó gondol egy 0 és 9 közé eső számot és a gép megpróbálja kitalálni, a "kisebb mint... ?", "nagyobb mint... ?" kérdésekkel. A felhasználó az I betűt üti le, ha a feltett kérdés igaz, H-t, ha hamis. Az elején egy rövid üzenetben tájékoztassa a felhasználót a teendőkről! code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ah,9 mov dx,offset msg int 21h mov bl,0 mov cl,9 ciklus: cmp bl,cl jae megvan mov dx,offset km mov ah,9 int 21h mov dl,cl add dl,bl inc dl shr dl,1 add dl,'0' mov ah,2 int 21h sub dl,'0' mov ah,1 int 21h or al,32 cmp al,'i' jz igen mov bl,dl jmp ciklus igen: mov cl,dl dec cl jmp ciklus megvan: mov ah,9 mov dx,offset r int 21h mov dl,bl add dl,'0' mov ah,2 int 21h mov ah,4ch int 21h msg db 'Gondolj 1 szamra 0..9 kozott es en kitalalom',13,10,'$' km db 13,10,'Kisebb mint (I/N) $' r db 13,10,'A szamod: $' code ends end start
Készítsen "UGRIK.COM" Assembly programot, amely letörli a képernyőt, és kiírja az angol ABC betűit a-tól z-ig úgy, hogy minden betű kiírása után vár egy billentyű lenyomására, és - Esc, "q", "Q" esetén azonnal véget ér a program, - a szóközre (space) 5 betűt ugrik előre, - a Backspace-re 5-öt hátra, code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ah,9 mov dx,offset help int 21h mov dl,'a' ciklus: mov ah,2 int 21h mov ah,8 int 21h cmp al,27 jz kilep cmp al,'q' jz kilep cmp al,'Q' jz kilep cmp al,32 jz space cmp al,8 jz backspace inc dl vege: cmp dl,'z' jbe ciklus jmp kilep space: add dl,5 jmp vege backspace: sub dl,5 jmp vege kilep: mov ah,4ch int 21h help db 'kilepes=Esc/q/Q Space=+5 Backspace=-5 ugras',13,10,'$' code ends end start
Készítsen "KISNAGY.COM" Assembly programot, amely letörli a képernyőt, bekér betűket, amelyeket úgy ír ki, hogy kisbetű helyett nagybetűt és nagy helyett kicsit! A program a 10. leütött billentyűre, Esc-re, "q"-ra vagy "Q"-ra érjen véget (amelyik előbb bekövetkezik). code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h ciklus: mov ah,8 ; bill bekeres int 21h cmp al,27 ; meglesi hogy ESC-e jz kilep xor al,32 ; ellenkezojere allitja azt a bitet ami nagy/kisbetukert felel mov ah,2 mov dl,al ; dl-be atrakja a modositott betut or al,32 ; al-ban levo betut kisbetusse konvertalja igy csak 'q'-ra kell vizsgalni cmp al,'q' jz kilep int 21h ; kiirja a betut jmp ciklus kilep: mov ah,4ch int 21h code
ends end
start
Készítsen "KIIR2.COM" Assembly programot, amely letörli a képernyőt és kiírja az "Assembly" szót a következőképpen: Assembly ssembly embly stb…. code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov cx,8 xor bx,bx ciklus: mov ah,9 mov dx,offset msg add dx,bx ; eltolas merteke int 21h inc bx mov dx,offset bck ; kurzort jo helyre viszi add dx,bx ; eltolas merteke int 21h loop ciklus mov ah,4ch int 21h msg db 'Assembly',10,'$' bck db 8,8,8,8,8,8,8,8,'$' code ends end start
Készítsen "FERDE1.COM" Assembly programot, amely letörli a képernyőt, udvariasan bekér egy szöveget (befejezés Enterre), amelyet az ábrán látható módon ferdén kiír a képernyőre. code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov dx,offset welcome mov ah,9 int 21h mov di,offset s xor cx,cx ciklus: mov ah,8 int 21h cmp al,13 jz kiir stosb ; = mov [di],al ; inc di mov ah,2 mov dl,al int 21h inc cx jmp ciklus kiir: mov si,offset s cmp cx,0 jz hiba mov ax,0b800h ; kepernyo memoria cime mov es,ax mov di,320 ; 3. sor 1. karater pozicioja ciklus2: movsb ; mov al,[si++] ; mov es:[di++],al add di,161 loop ciklus2 jmp vege hiba: mov dx,offset hibas mov ah,9 int 21h vege: mov ah,4ch int 21h s db '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$' welcome db 'Irj be 1 szoveget: $' hibas db 'Nem irtal be semmit!$' code ends end start
Készítsen VIZSGA3.COM programot, amely letörli a képernyőt és megjeleníti a leütött billentyűket a képernyőn egészen addig, míg az ABC szó betűit nem írjuk be (bármilyen sorrendben), ekkor véget ér. Az elején egy rövid üzenetben tájékoztassa a felhasználót a teendőkről! code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h xor bh,bh ; utolso 3 bit tarolja |a|b|c| leutottseget ciklus: mov ah,1 int 21h or al,32 ; kisbetusse konvertal sub al,'a' ; betuket 0..26 tartomanyra kepezi mov cl,al shl ah,cl ; ha al='a' akkor ah=1, al='b'-> ah=2, al='c'->ah=4 or bh,ah ; ha a/b/c-t utott akkor bh-ban beallitja utolso 3bitet amelyiket leutotte and bh,7 ; elso 5bitet 0-ra allitja cmp bh,7 ; ha bh=00000111 akkor kilep jnz ciklus vege: mov ah,4ch int 21h code
ends end
start
Készítsen VIZSGA3.COM programot, amely képernyőtörlés után beolvas egy szöveget (max. 10 karakter, befejezés Enterre) és kiírja úgy, hogy a magánhangzók után a "-va", "-ve" stb. betűket is kiírja. Példa: beírjuk: balaton, a program kiírja: bavalavatovon code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov dx,offset welcome mov ah,9 int 21h mov di,offset msg ; itt tarolom a bekert szoveget add di,2 ; 13,10-et nem akarom felulirni xor dh,dh ; leutott karakterek szama ciklus: mov ah,1 int 21h cmp al,13 jz kiir inc dh stosb ; [di]:=al mov dl,al ; elmentjuk a karaktert dl-be mov cx,5 mov si,offset mgh ismgh: lodsb ; al<-[si++] cmp al,dl jz mghyes loop ismgh jmp ciklus ; ha idaig jut akkor ez msgh mghyes: mov al,'v' stosb ; v-t tarolja el mov al,dl stosb ; most a mgh-t tarolja el jmp ciklus kiir: mov ah,9 ; kiirashoz keszul cmp dh,0 jz hiba mov dx,offset msg jmp kilep hiba: mov dx,offset hibas kilep: int 21h ; kiirja vmelyik szoveget amire dx mutat mov ah,4ch int 21h msg db 13,10,'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$' mgh db 'aeiou' welcome db 'Irj be 1 szoveget: $' hibas db 'Nem irtal be semmit!$' code ends end start
Készítsen "KETSHIFT.COM" Assembly programot, amely 1. letörli a képernyőt, 2. ezután kiírja a "Nyomja meg egyszerre mindkét SHIFT-et!" üzenetet, 3. és addig vár, amíg mindkét SHIFT nincs lenyomva, ekkor visszatér DOS-ba. code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov dx,offset welcome mov ah,9 int 21h ciklus: mov ah,2 ; valto bill allapot int 16h and al,3 ; 0-ra allitja az elso 6bitet cmp al,3 ; ha utolso 2bit=1 akkor zeroflag=0 lesz jnz ciklus mov ah,4ch int 21h welcome db 'Nyomd meg egyszerre mind2 SHIFT-et!$' code ends end start
Készítsen VIZSGA3.COM programot, amely képernyőtörlés után elszámol 98-tól 2-ig (visszafelé) kettesével. A számokat egyesével írja ki, egymás alá, várjon egy billentyű leütésére és Esc-re azonnal érjen véget. code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov cx,10 ciklus: mov ax,cx mov bl,10 div bl cmp al,0 ; ha 2 jegyu a szam akkor 0
Készítsen "NEHANY.COM" Assembly programot, amely 1. letörli a képernyőt, 2. udvariasan bekér egy betűt és egy egyjegyű számot, 3. és kiírja az angol ABC betűit a megadott karaktertől, a megadott számút (lásd az ábrát). code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov dx,offset kezdo mov ah,9 int 21h mov ah,1 int 21h mov dl,al ; dl-be mentjuk a kezdo karaktert push dx mov dx,offset darab mov ah,9 int 21h mov ah,1 int 21h xor cx,cx mov cl,al ; cl-be mentjuk a kezdo karaktert sub cl,'0' mov ah,2 mov dl,13 int 21h mov dl,10 int 21h pop dx kiir: int 21h inc dl loop kiir mov ah,4ch int 21h kezdo db 'Add meg a kezdo betut:$' darab db 13,10,'Hany darabot:$' code ends end start
Készítsen "KIIR1.COM" Assembly programot, amely letörli a írja az "Assembly" szót a következőképpen: code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov cx,10 mov ah,2 ciklus: mov si,offset msg push cx kiir: lodsb ; al-ba beolvassa akt karaktert si poziciorol mov dl,al int 21h loop kiir pop cx loop ciklus mov ah,4ch int 21h msg db 13,10,'Assembly$' code ends end start
Készítsen "FORDIT.COM" Assembly programot, amely letörli a képernyőt és egy megadott stringet fordítva kiír a következő sorba: - hármasért: a szöveget egy udvarias felszólításra kell begépelni, max. 10 karakterből állhat, befejezés Enterre code
segment para
public
'code'
assume cs:code, ds:code, es:nothing, ss:nothing org
100h
start: mov ax,3 int 10h mov ah,9 mov dx,offset welcome int 21h mov di,offset msg xor cx,cx ; szoveg hossza beker: mov ah,1 int 21h cmp al,13 jz fordit stosb inc cx jmp beker fordit: mov ah,2 mov dl,13 int 21h mov dl,10 int 21h dec di ciklus: mov al,[di] mov dl,al int 21h dec di loop ciklus mov int
ah,4ch 21h
welcome db 'Irj be 1 szoveget:$' msg db '$$$$$$$$$$$$$$$$$$$$$' code ends end start