2009-12-17 19 views
18
mov al,10 
add al,15 

मैं अल 'के मान को कैसे प्रिंट करूं?असेंबली भाषा में एक नंबर प्रिंटिंग?

+6

आप अपने मशीन के प्रकार का उल्लेख करने की जरूरत है और ऑपरेटिंग: "$"

returns nothing - outputs character string to STDOUT up to "$" - backspace is treated as non-destructive - if Ctrl-Break is detected, INT 23 is executed 

रेफरी में समाप्त होने वाले DX = सूचक स्ट्रिंग के लिए प्रणाली, क्योंकि I/O आमतौर पर बहुत मंच-निर्भर है। – unwind

+1

उसने किया, इसमें एक "win16" टैग है। –

+3

win16 वास्तव में? अभी भी विंडोज 3.1 का उपयोग कर रहे हैं? –

उत्तर

21

क्या आपने int 21h service 2 को आजमाया है? DL प्रिंट करने के लिए चरित्र है।

mov dl,'A' ; print 'A' 
mov ah,2 
int 21h 

पूर्णांक मान मुद्रित करने के लिए, आप अलग-अलग पात्रों को पूर्णांक विघटित करने के लिए एक पाश लिखने के लिए होगा। यदि आप हेक्स में मूल्य प्रिंट करने के ठीक हैं, तो यह बहुत छोटा है।

आप डॉस सेवाओं पर भरोसा नहीं कर सकते हैं, तो आप भी उपयोग करने के लिए सक्षम हो सकता है BIOS int 10hAL साथ सेट 0Eh या 0Ah करने के लिए।

+0

बहुत बढ़िया मदद .. एक लंबे समय की तलाश में था .. हर जगह यह mov ah था, 09 जो सरणी प्रिंट करने के लिए, लेकिन एकल मूल्य प्रिंट करने के लिए 02 को नहीं चलाता। – unrealsoul007

-1

कॉल WinAPI समारोह

+2

f आप एएसएम या सी में एक विंडोज़ एप्लीकेशन (यहां तक ​​कि) लिखते हैं ... फिर, फ़ंक्शन एक WinAPI फ़ंक्शन होगा। यह "* मुझे बीमार है" कहने वाले किसी व्यक्ति को "* आपको डॉक्टर * देखना चाहिए" का जवाब देना है। – user2284570

6

विधानसभा भाषा कुछ भी मुद्रण का कोई प्रत्यक्ष साधन है (यदि यू जीत एप्लिकेशन विकसित कर रहे)। आपका असेंबलर ऐसी लाइब्रेरी के साथ आ सकता है या नहीं हो सकता है जो ऐसी सुविधा प्रदान करता है, अन्यथा आपको इसे स्वयं लिखना होगा, और यह काफी जटिल कार्य होगा। आपको यह तय करना होगा कि चीजों को प्रिंट करना है - खिड़की में, प्रिंटर पर? असेंबलर में, इनमें से कोई भी आपके लिए नहीं किया जाता है।

0

आपके पास Win32 API के MessageBoxA को कॉल करने में कुछ भाग्य हो सकता है, हालांकि Win16 उस विशेष विधि का समर्थन करता है किसी और के उत्तर देने के लिए।

1
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 
+4

कृपया कुछ वाक्यों को जोड़ें जो उत्तर के विवरण के लिए कोड का हिस्सा नहीं हैं ... – user2284570

-1
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 
-1
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 ; 
+0

बहुत धन्यवाद Kay। –

+0

स्मृति में 'i' के माध्यम से मूल्य को उछालने की कोई आवश्यकता नहीं है। 'mov dl, al' ठीक काम करेगा। –

+0

4 साल बीत चुके हैं, और मैं असेंबली भाषा भूल जाता हूं। :( यह संभावना है कि आप सही हैं। धन्यवाद। <3 –

-1
;  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 
+3

कृपया कुछ वाक्यों को जोड़ें जो उत्तर का विवरण देने के लिए कोड का हिस्सा नहीं हैं ... – user2284570

+1

भयानक प्रारूपण। कई सफेद जगहों के साथ लगभग अपठनीय होने के लिए डाउनवॉटेड, कोई इंडेंटिंग नहीं, और कोई टिप्पणी नहीं। –

3

डॉस प्रिंट 32 बिट मूल्य (80386+ के लिए)
(64 पर बिट OS DOSBox का उपयोग)

.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 

वैकल्पिक हेक्साडेसिमल उत्पादन के साथ EAX में संग्रहीत सॉफ़्टवेयर इंटरप्ट का उपयोग किए बिना सीधे वीडियोबफर पर स्ट्रिंग आउटपुट:

;----------------------- 
; 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.. 
0

एएच = 09 डी एस: 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 
+1

कृपया अपने कुछ कोड को समझाने का प्रयास करें। – Marcs

संबंधित मुद्दे