View Full Version : سوال: تبدیل یک عدد word به رشته byte
mortezamsp
چهارشنبه 17 تیر 1388, 18:43 عصر
با سلام.
من لازم دارمک تا یه عدد word رو به یه رشته تبدیل کنم تا بتونم در صفحه نمایش چاپش کنم.این کدی که من نوشتم جواب نمیده و درست اجرا نمیشه:
x dw 0,'$'
buffer db 10 dup(0),'$'
putnum macro number
local p1,p2,p3,display
;si must point to the end of buffer
lea si,buffer
mov cl,lenth
p1:
inc si
cmp cl,0
je p2
dec cl
jmp p1
p2:
inc si
mov [si],'$'
dec si
mov ax,number
p3: ;convert integer(x) to
; characters(buffer)
cwd
mov bx,10
div bx
add dx,48
mov [si],dx
dec si
cmp ax,0
jnbe p3
display:
gotoxy 13,3
putstr buffer ;print buffer
endm
ازتون میخوام یه کد قابل اجرا بهم نشون بدین.ممنون.
tdkhakpur
چهارشنبه 17 تیر 1388, 23:08 عصر
سلام
از ماکروی زیر استفاده کنید.
;== NUMBER TO DECIMAL ================================================== ====;
; This Macro Chenge HEX Or Binary To Decimal .........................
; NUMBER Is (WORD) .................................................. ..
; BUFFER is address of buffer
; digit is len of buffer or digit numbers
; RETURN : This Macro Return In buffer Decimal Number That It
; Has In His End 0
DECIMAL MACRO NUMBER, BUFFER, DIGIT
LOCAL BUFFER,COUNTER, LOOP_, E1, E2, E0, RESUM, WHILE ,WHILE_,E2_, E3, E4,LOOP__, JMP_1, EXIT_
JMP JMP_1
COUNTER DB 0
JMP_1:
MOV CX, DIGIT
MOV BX, CX
DEC BX
LOOP__:;----------------------------------;
MOV BYTE PTR BUFFER[BX], 0 ; clear the buffer
DEC BX ;
LOOP LOOP__;------------------------;
CMP NUMBER, 0
JL E0
CMP NUMBER, 9
JG E0
MOV DX, NUMBER
MOV BX, DIGIT
MOV BYTE PTR BUFFER[BX-1], DL
ADD BYTE PTR BUFFER[BX-1], 30H
MOV BP, OFFSET BUFFER[BX-1]
JMP EXIT_
E0:
MOV CX, NUMBER
MOV COUNTER, 0
LOOP_:
ADD COUNTER, 1
CMP COUNTER, 9
JNE E1
MOV BX, DIGIT
SUB BX, 1
MOV DL, COUNTER
ADD BYTE PTR BUFFER[BX], DL
WHILE:
CMP BYTE PTR BUFFER[BX], 9
JLE E2
SUB BYTE PTR BUFFER[BX], 10
DEC BX
ADD BYTE PTR BUFFER[BX], 1
JMP WHILE
E2:
MOV COUNTER, 0
E1:
LOOP LOOP_
RESUM:
MOV BX, DIGIT
SUB BX, 1
MOV DL, COUNTER
ADD BYTE PTR BUFFER[BX], DL
WHILE_:
CMP BYTE PTR BUFFER[BX], 9
JLE E2_
SUB BYTE PTR BUFFER[BX], 10
DEC BX
ADD BYTE PTR BUFFER[BX], 1
JMP WHILE_
E2_:
MOV BX, -1
E3:
INC BX
CMP BYTE PTR BUFFER[BX], 0
JE E3
LEA BP, BUFFER[BX]
E4:
MOV DL, BYTE PTR BUFFER[BX]
ADD BYTE PTR BUFFER[BX], 30H
INC BX
CMP BX, DIGIT
JL E4
EXIT_:
ENDM
;---------------------------------------------------------------------------;
mortezamsp
چهارشنبه 17 تیر 1388, 23:46 عصر
با سلام.
خیلی ممنون از شما آقای خاکپور که همیشه جواب میدید.
ابن ماکروی شما موقغ emukate خطا میده.خطا مال این خط برنامست:
MOV BYTE PTR BUFFER[BX], 0
(355) wrong parameters: MOV BYTE PTR buffer_loc1tmp[BX], 0
(355) probably it's an undefined var: BYTE PTR buffer_loc1tmp[BX]
بهتره من سوالمو اینطور بپرسم:چطور میشه یه word رو چاپ کرد در صفحه نمایش؟
Open-Source
پنج شنبه 18 تیر 1388, 09:49 صبح
این برنامه یه عدد که تو AX هست رو چاپ میکنه.
امیدوارم مفید باشه.:لبخندساده:
;
;Get a Number(in AX) & print
;
.model small
.data
sum db 5 dup(' '),'$'
.code
;+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
main proc
mov ax,@data
mov ds,ax
;;;;;;;;;;;;;;;; your Number
mov ax,1030
;-------------------- Convert Number to String for Print
mov si,offset sum
call bintoasc
;--------------------- Print number(string)
mov ah,9
mov dx,offset sum
int 21h
;--------------------- end
mov ah,0
int 16h
mov ah,4ch
int 21h
main endp
;=================================Convert number to string(get ax,out si)
bintoasc proc
push bx
push dx
mov bx,10
up_bin:
mov dx,0
div bx
add dl,'0'
mov [si+4],dl
dec si
cmp ax,0
jne up_bin
pop dx
pop bx
ret
bintoasc endp
;======================================
end main
;+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++
mortezamsp
پنج شنبه 18 تیر 1388, 16:38 عصر
با سلام.
خیای ممنوناز کمکتون.من اونو بشکل ماکرو اینطوری درآوردمش:
putrez macro buffer,x
local next_digit
push_all
mov ax,x
clear buffer
lea si,buffer
mov bx,10
next_digit:
mov dx,0
div bx
add dl,48
mov [si+4],dl
dec si
cmp ax,0
jne next_gigit
pop dx
pop bx
gotoxy 18,3
putstr buffer
pop_all
endm
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.