Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 打印出一个十进制数_Assembly_X86 - Fatal编程技术网

Assembly 打印出一个十进制数

Assembly 打印出一个十进制数,assembly,x86,Assembly,X86,我的代码应该打印出一个十进制数,但它不会,我也不知道为什么 我只是一个初学者,我已经读了很多建议,但我不能解决这个问题。感谢大家的反应!(要打印的数字是COUNT) 要读取COUNT的值,请使用mov dl,byte[COUNT]或mov dl,COUNT 这取决于您使用的汇编程序 您还应该使用xor-dh,dh代替xor-dl,dl 您可以正确处理的最大数字是99 您可以简化代码 xor ah, ah mov al, COUNT mov bh, 0ah div bh mov bx,ax m

我的代码应该打印出一个十进制数,但它不会,我也不知道为什么

我只是一个初学者,我已经读了很多建议,但我不能解决这个问题。感谢大家的反应!(要打印的数字是
COUNT


要读取COUNT的值,请使用
mov dl,byte[COUNT]
mov dl,COUNT

这取决于您使用的汇编程序

您还应该使用
xor-dh,dh
代替
xor-dl,dl

您可以正确处理的最大数字是99

您可以简化代码

xor ah, ah
mov al, COUNT
mov bh, 0ah
div bh 
mov bx,ax 
mov dl,bl 
add dl,’0′ 
mov ah,02h 
int 21h
mov dl,bh
add dl,’0′ 
mov ah,02h 
int 21h
ret

首先,您必须将数字转换为字符串,然后才能“打印出来”。下一段代码是用EMU8086编写的,并展示了如何操作(注释将帮助您理解):


学习使用调试器和单步执行代码。此外,如果您希望其他人提供帮助,请花时间对您的代码进行注释,并提供比
更好的问题描述。另见。
xor ah, ah
mov al, COUNT
mov bh, 0ah
div bh 
mov bx,ax 
mov dl,bl 
add dl,’0′ 
mov ah,02h 
int 21h
mov dl,bh
add dl,’0′ 
mov ah,02h 
int 21h
ret
.stack 100h
.data

num  dw 10382      ;ANY NUMBER.
str  db 7 dup('$') ;STRING TO STORE NUMBER. 

.code          
;INITIALIZE DATA SEGMENT.
  mov  ax, @data
  mov  ds, ax

;CONVERT "NUM" TO STRING. RESULT COMES BACK IN "STR".
  mov  ax, num
  call number2string

;DISPLAY NUMBER.
  mov  ah, 9
  mov  dx, offset str ;NUMBER CONVERTED TO STRING.
  int  21h

;STOP UNTIL USER PRESS ANY KEY.
  mov  ah,7
  int  21h

;FINISH THE PROGRAM PROPERLY.
  mov  ax, 4c00h
  int  21h           

;------------------------------------------

;NUMBER TO CONVERT MUST ENTER IN AX.
;ALGORITHM : EXTRACT DIGITS ONE BY ONE, STORE
;THEM IN STACK, THEN EXTRACT THEM IN REVERSE
;ORDER TO CONSTRUCT STRING.

proc number2string
  mov  bx, 10 ;DIGITS ARE EXTRACTED DIVIDING BY 10.
  mov  cx, 0 ;COUNTER FOR EXTRACTED DIGITS.
cycle1:       
  mov  dx, 0 ;NECESSARY TO DIVIDE BY BX.
  div  bx ;DX:AX / 10 = AX:QUOTIENT DX:REMAINDER.
  push dx ;PRESERVE DIGIT EXTRACTED FOR LATER.
  inc  cx ;INCREASE COUNTER FOR EVERY DIGIT EXTRACTED.
  cmp  ax, 0  ;IF NUMBER IS
  jne  cycle1 ;NOT ZERO, LOOP. 
;NOW RETRIEVE PUSHED DIGITS.
  mov  si, offset str
cycle2:  
  pop  dx        
  add  dl, 48 ;CONVERT DIGIT TO CHARACTER.
  mov  [ si ], dl
  inc  si
  loop cycle2  

  ret
endp