mov al,10
add al,15
'al' değerinin değerini nasıl yazdırabilirim?Montaj dilinde bir numara mı yazdırılıyor?
mov al,10
add al,15
'al' değerinin değerini nasıl yazdırabilirim?Montaj dilinde bir numara mı yazdırılıyor?
int 21h
service 2 denediniz mi? Yazdırılacak karakter DL
'dur.
mov dl,'A' ; print 'A'
mov ah,2
int 21h
tamsayı değeri yazdırmak için, bireysel karakter tamsayı ayrıştırmak için bir döngü yazmak gerekecek. Değeri altıya yazdırmakla sorun yoksa, bu oldukça önemsiz.
DOS hizmetlerine güvenemez, ayrıca kullanmak mümkün olabilir BIOS int 10h
0Eh
veya 0Ah
için ayarlanmış AL
ile.
Müthiş yardım .. uzun zamandır arıyordu .. her yerde mov ah, 09 dizileri basmak için değil, mov ah, 02 tek değer baskı için. – unrealsoul007
Çağrı WinAPI fonksiyonu
f Windows uygulamasında (hatta) asm veya C olarak yazılır. Ardından, işlevler bir WinAPI işlevi olacaktır. "* Ben hastayım" diyen birine "* bir doktor görmelisin" cevabını vermek gibi. – user2284570
Assembly dili şey baskı doğrudan araçlara sahip (u kazan-uygulama geliştirme olursa). Toplayıcınız böyle bir tesis sağlayan bir kütüphaneye sahip olabilir veya gelmeyebilir, aksi takdirde kendiniz yazmanız gerekir ve oldukça karmaşık bir işlev olacaktır. Ayrıca, bir şeylerin nerede yazdırılacağına da karar vermelisiniz - bir pencerede, yazıcıda? Montajcıda, bunların hiçbiri sizin için yapılmaz.
Win16'nın bu özel yöntemi destekleyip desteklemediği başka birisinin yanıt vermesine rağmen, Win32 API'sinin MessageBoxA'ını çağırmak için biraz şansınız olabilir.
PRINT_SUM PROC NEAR
CMP AL, 0
JNE PRINT_AX
PUSH AX
MOV AL, '0'
MOV AH, 0EH
INT 10H
POP AX
RET
PRINT_AX:
PUSHA
MOV AH, 0
CMP AX, 0
JE PN_DONE
MOV DL, 10
DIV DL
CALL PRINT_AX
MOV AL, AH
ADD AL, 30H
MOV AH, 0EH
INT 10H
PN_DONE:
POPA
RET
PRINT_SUM ENDP
Lütfen cevabı detaylandırmak için kodun bir parçası olmayan bazı cümleler ekleyin ... – user2284570
mov al,3 ;print ♥
mov dl,al
;call print service(2) to print from dl
mov ah,2
int 21h
;return to DOS
mov ah,76 ;76 = 4ch
int 21h ;call interrupt
mov al,4 ; input
; print AL
or al,30h ; Important! =>Convert an integer from 0-9 to its ASCII encoding
mov i,al
MOV AH, 2 ;
MOV DL, i ; Print Character.
INT 21H ;
Very Thanks Kay. –
Belleğe 'i 'aracılığıyla değeri döndürmeye gerek yoktur. mov dl, iyi çalışırdı. –
4 yıl geçti ve montaj dilini unuttum. :( Muhtemelen haklısınız. Teşekkür ederiz. <3 –
; good example of unlimited num print
.model small
.stack 100h
.data
number word 6432
string db 10 dup('$')
.code
main proc
mov ax,@data
mov ds,ax
mov ax,number
mov bx ,10
mov cx,0
l1:
mov dx,0
div bx
add dx,48
push dx
inc cx
cmp ax,0
jne l1
mov bx ,offset string
l2:
pop dx
mov [bx],dx
inc bx
loop l2
mov ah,09
mov dx,offset string
int 21h
mov ax,4c00h
int 21h
main endp
end main
Lütfen yanıtın ayrıntılarını vermek için kodun bir parçası olmayan bazı cümleler ekleyin ... – user2284570
korkunç biçimlendirme. Tonlarca boşluk ile neredeyse okunamaz, girintisiz ve yorumsuz olduğu için reddedildi. –
.code
mov ax,@DATA ; get the address of the data segment
mov ds,ax ; store the address in the data segment register
;-----------------------
mov eax,0FFFFFFFFh ; 32 bit value (0 - FFFFFFFF) for example
;-----------------------
; convert the value in EAX to hexadecimal ASCIIs
;-----------------------
mov di,OFFSET ASCII ; get the offset address
mov cl,8 ; number of ASCII
P1: rol eax,4 ; 1 Nibble (start with highest byte)
mov bl,al
and bl,0Fh ; only low-Nibble
add bl,30h ; convert to ASCII
cmp bl,39h ; above 9?
jna short P2
add bl,7 ; "A" to "F"
P2: mov [di],bl ; store ASCII in buffer
inc di ; increase target address
dec cl ; decrease loop counter
jnz P1 ; jump if cl is not equal 0 (zeroflag is not set)
;-----------------------
; Print string
;-----------------------
mov dx,OFFSET ASCII ; DOS 1+ WRITE STRING TO STANDARD OUTPUT
mov ah,9 ; DS:DX->'$'-terminated string
int 21h ; maybe redirected under DOS 2+ for output to file
; (using pipe character">") or output to printer
; terminate program...
.data
ASCII DB "00000000",0Dh,0Ah,"$" ; buffer for ASCII string
Alternatif
(64 bit işletim sistemi dosbox kullanın) (80386 + için) onaltılık çıkışı ile EAX saklanan
DOS Baskı 32 bitlik değer dize çıktısını doğrudan yazılım ara bağlantısı kullanmadan video oynatıcısına yönlendirin:
;-----------------------
; Print string
;-----------------------
mov ax,0B800h ; segment address of textmode video buffer
mov es,ax ; store address in extra segment register
mov si,OFFSET ASCII ; get the offset address of the string
; using a fixed target address for example (screen page 0)
; Position`on screen = (Line_number*80*2) + (Row_number*2)
mov di,(10*80*2)+(10*2)
mov cl,8 ; number of ASCII
cld ; clear direction flag
P3: lodsb ; get the ASCII from the address in DS:SI + increase si
stosb ; write ASCII directly to the screen using ES:DI + increase di
inc di ; step over attribut byte
dec cl ; decrease counter
jnz P3 ; repeat (print only 8 ASCII, not used bytes are: 0Dh,0Ah,"$")
; Hint: this directly output to the screen do not touch or move the cursor
; but feel free to modify..
AH = 09 DS: http://stanislavs.org/helppc/int_21-9.html
.data
string db 2 dup(' ')
.code
mov ax,@data
mov ds,ax
mov al,10
add al,15
mov si,offset string+1
mov bl,10
div bl
add ah,48
mov [si],ah
dec si
div bl
add ah,48
mov [si],ah
mov ah,9
mov dx,string
int 21h
Lütfen kodunuzun bazılarını açıklamaya çalışınız. – Marcs
ve işletme: "$"
ref biten dizeye DX = işaretçi Sistem, G/Ç genellikle çok platform bağımlı olduğundan. – unwind
O yaptı, bir "win16" etiketi var. –
win16 gerçekten mi? Hala Windows 3.1 kullanıyoruz? –