Aktív témák
-
nusquam
csendes tag
Na hali!
Nem tudom, hogy yoo helyen jarok-e de nagy szuksegem van egy kis segitsegre!
A kerdesem az lenne, hogy, hogyan lehet Win32asm alatt ugy beolvasmi egy szamot, hogy ne sztringként olvassa be.
Azt megoldottam, hogy a textboxba csak szamokat lehessen beirni, de arra mar nem futta agytekervenyeimbol, hogy ne sztringkent szedje be.
A winhlp32 -ben is kerestem ilyesfajta api-kat de eddig semmi erdekeset nem kaptam.
Elore is koszi... -
-
Jester01
veterán
Mondjuk ilyesmit lehet csinálni:
Border EQU 10h ; border color
Text EQU 30h ; text color
Default EQU 07h ; default color
...
CALL write_block ;Egy blokk kiírása
; restore colors on last line
mov ax, 0920h
mov bx, Default
mov cx, 80
int 10h
MOV AH,4Ch ;Kilépés a programból
INT 21h
...
hborder proc
push ax
push bx
push cx
push dx
mov ax, 0920h
mov bx, Border
mov cx, 67
int 10h
mov ah, 3
mov bx, cx
int 10h ; get cursor (dl = col)
mov dl, bl
mov ah, 2
int 10h
; erase to end of line
mov ax, 0920h
mov bx, Default
mov cx, 13
int 10h
call cr_lf
pop dx
pop cx
pop bx
pop ax
ret
hborder endp
vborder proc
push ax
push bx
push cx
push dx
mov ah, 3
xor bx, bx
int 10h ; get cursor (dl = col)
mov ax, 0920h
mov bx, Border
mov cx, 1
int 10h ; left border
mov ah, 2
mov dl, 66
int 10h
mov ax, 0920h
mov cx, 1
int 10h ; right border
inc dl
mov ah, 2
int 10h ; cursor right
; erase to end of line
mov ax, 0920h
mov bx, Default
mov cx, 13
int 10h
mov dl, 1
mov ah, 2
int 10h ; cursor at col 2
mov ax, 0920h
mov bx, Text
mov cx, 65
int 10h
pop dx
pop cx
pop bx
pop ax
ret
vborder endp
write_block proc ;Egy blokk kiírása a képerny\u0151re
PUSH BX
PUSH CX ;CX mentése
PUSH DX ;Dx mentése
call hborder ; top border
MOV CX, 32 ;Kiírandó sorok száma CX-be
s_w_new:
CALL out_line ;Egy sor kiírása
CALL cr_lf ;Soremelés
ADD DX, 16 ;Következ\u0151 sor adatainak kezd\u0151címe
LOOP s_w_new ;Új sor
call hborder ; bottom border
POP DX ;DX visszaállítása
POP CX ;CX visszaállítása
POP BX
RET
out_line proc
PUSH BX ;BX mentése
PUSH CX ;CX mentése
PUSH DX ;DX mentése
call vborder
...
Lehet, hogy tök máshogy érdemes csinálni, mindenesetre mûködik: -
Gergi
senior tag
Nem én írtam a progit hanem a tanárom könyvéből másoltam ki. A könyvet használva kell vmi háttérszínt meg keretet adni a proginak (magyarul testreszabni). A szektorolvasás tökéletesen lefut. A háttérszínadást meg a keretet elmagyaráznád részletesebben is? Láma vagyok ehhez.
-
Jester01
veterán
-
Gergi
senior tag
Végre valaki!
Az a feladat h kell egy olyan progit írni assembly-ben ami beolvassa a floppy egy szektorát és kiírja a tartalmát. A kiírt adatoknál legyen keret és valamilyen háttérszín (mondjuk kék, de lehet átmenetes is).
Eddig idáig jutottam:
.MODEL SMALL
Space EQU '' '' ;Szóköz karakter
.STACK
.DATA?
Block DB 512 DUP (?) ; 1 blokknyi terület kijelölése
.CODE
main proc
MOV AX,dgroup ;DS beállítása
MOV DS,AX
LEA BX, BLOCK;DSX ;memóriacímre tölti a blokkot
MOV AL, 0 ;Lemezmeghajtó száma (A:0, B:l, C:2, stb.)
MOV CX, 1 ;Egyszerre beolvasott blokkok száma
MOV DX, 0 ;Lemezolvasás kezdőblokkja
INT 25h ;Olvasás
POPF ;A veremben tárolt jelzőbitek törlése
XOR DX, DX ;Kiírandó adatok kezdőcíme DSX
CALL write_block ;Egy blokk kiírása
MOV AH,4Ch ;Kilépés a programból
INT 21h
main endp
convert_hexa proc
push cx
push dx
mov dh, dl
mov cx, 4
shr dl, cl
call convert_hexa_digit
mov dl, dh
and dl, 0Fh
call convert_hexa_digit
pop dx
pop cx
ret
convert_hexa endp
write_char proc
push ax
mov ah, 2
int 21h
pop ax
ret
write_char endp
convert_hexa_digit proc
push dx
cmp dl, 10
jb non_hexa_letter
add dl, ''A''-''0''-10
non_hexa_letter:
add dl, ''0''
call write_char
pop dx
ret
convert_hexa_digit endp
write_block proc ;Egy blokk kiírása a képernyőre
PUSH CX ;CX mentése
PUSH DX ;Dx mentése
MOV CX, 32 ;Kiírandó sorok száma CX-be
s_w_new:
CALL out_line ;Egy sor kiírása
CALL cr_lf ;Soremelés
ADD DX, 16 ;Következő sor adatainak kezdőcíme
LOOP s_w_new ;Új sor
POP DX ;DX visszaállítása
POP CX ;CX visszaállítása
RET
write_block endp
out_line proc
PUSH BX ;BX mentése
PUSH CX ;CX mentése
PUSH DX ;DX mentése
MOV BX,DX ;Sor adatainak kezdőcíme BX-be
PUSH BX ;Mentés a karakteres kiíráshoz
MOV CX, 16 ;Egy sorban 16 hexadecimális karakter
hexa_out:
MOV DL, Block[BX] ;Egy bájt betöltése
CALL convert_hexa ;Kiírás hexadecimális formában
MOV DL,Space ; Szóköz kiírása a karakterek között
CALL write_char
INC BX ;Következő adatbájt címe
LOOP hexa_out ;Következő bájt
MOV DL, Space ;Szóköz kiírása a kétféle mód között
CALL WRITE_CHAR
MOV CX, 16 ;Egy sorban 16 karakter
POP BX ;Adatok kezdőcímének beállítása
ascii_out:
MOV DL, Block[BX] ; Egy bájt betöltése
CMP DL, Space ; Vezérlőkarakterek kiszűrése
JA visible ; Ugrás, ha látható karakter
MOV DL, Space ;Nem látható karakterek cseréje szóközre
visible:
CALL write_char ;Karakter kiírása
INC BX ;Következő adatbájt címe
LOOP ascii_out ;Következő bájt
POP DX ;DX visszaállítása
POP CX ; CX visszaállítása
POP BX ;BX visszaállítása
RET ;Vissza a hívó programba
out_line endp
end -
Gergi
senior tag
Esti Up!
-
Gergi
senior tag
Déli Up!
Valaki segítsen már lécci, mert csütörtökön le kéne adnom a kész progit! -
Gergi
senior tag
Reggeli Up!
-
csiga997
őstag
P. Norton - Az IBM PC assembly nyelvű programozása kell neked (Novotrade-Prentice Hall, 1991, ISBN9635850166)
Régi könyv, antikvárium, könyvtár azért esélyes. Pont egy ilyen diszk-kezelő progi felépítését boncolgatja lépésről-lépésre.
(Ha 1991-ben kérdezted volna, még talán érdemben is tudtam volna segíteni...)
-
Gergi
senior tag
Up!
-
Gergi
senior tag
Sziasztok!
Teljesen kezdő vagyok a témában, de van egy olyan feladatom, hogy egy floppy szektor beolvasó progit kell készítenem assembly-ben valami kerettel és háttérszínnel együtt. Idáig jutottam a progizással. Mivel kéne még kiegészíteni (háttérszín, keret)? Előre is köszönöm a segítséget!
(esetleg ha lehet egyszerűsíteni a progit, akkor lécci azt is írjátok meg)
.model small
.stack
.data?
block DB 512 DUP(?)
.code
main proc
mov ax, dgroup
mov ds, ax
lea bx, block ;ds:bx cel
mov al, 0 ;A: meghajto
mov cx, 1 ;1 db block olvasasa
mov dx, 0 ;kezdo cim
int 25h
popf
xor dx, dx
call write_block
mov ah, 4Ch
int 21h
main endp
write_block proc
push cx
push dx
mov cx,32
s_w_new:
call out_line
call crlf
add dx, 16
loop s_w_new
pop dx
pop cx
ret
write_block endp
space EQU '' ''
CR EQU 10
LF EQU 13
out_line proc
push bx
push cx
push dx
mov bx, dx
push bx
mov cx,16
hexa_out:
mov dl, block[bx]
call convert_hexa
mov dl, space
call write_char
inc bx
loop hexa_out
mov dl, space
call write_char
mov cx, 16
pop dx
ascii_out:
mov dl, block[bx]
cmp dl, space
ja visible
mov dl, space
visible:
call write_char
inc bx
loop ascii_out
pop dx
pop cx
pop dx
out_line endp
convert_hexa proc
push cx
push dx
mov dh, dl
mov cx, 4
shr dl, cl
call convert_hexa_digit
mov dl, dh
and dl, 0Fh
call convert_hexa_digit
pop dx
pop cx
ret
convert_hexa endp
write_char proc
push ax
mov ah, 2
int 21h
pop ax
ret
write_char endp
crlf proc
push dx
mov dl, cr
call write_char
mov dl, lf
call write_char
pop dx
ret
crlf endp
convert_hexa_digit proc
push dx
cmp dl, 10
jb non_hexa_letter
add dl, ''A''-''0''-10
non_hexa_letter:
add dl, ''0''
call write_char
pop dx
ret
convert_hexa_digit endp
END
Aktív témák
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Vicces képek
- Miskolc és környéke adok-veszek-beszélgetek
- Villanyszerelés
- Mikrotik routerek
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Kikapcsolható lesz a PWM az iPhone 17 modelleken
- TPM (trusted platform module) topic
- További aktív témák...
- Féláron eladó vadonatúj razer blade 14 rtx 3080ti
- 500 ezerrel ár alatt! Vadonatúj garanciás razer blade 16 oled kijelző rtx 4070
- Hardverapró árérték bajnoka! Razer blade rtx 3080 ti i9 32gb ddr5 4k kijelző 144hz!
- Eladó kiskergaris 18TB-os Seagate EXOS X18 Enterprise HDD
- Félkonfig // I7 7700, GTX 1070, 16 GB DDR4
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest