2014-12-26 2 views
1

화면에 등록 번호를 인쇄하고 싶습니다. 또한 그것을 문자 (바이트)의 문자열로 저장하려고합니다. 나는 150 같은 번호가 있다면 그래서, 나는,화면 번호에 인쇄 번호

'1'로 특정 주소에 저장하고 싶은 것 '5', '0'

mov ebx, dword ptr[ebp+8] 
; eax contains value 
; ebx contains address to store characters 

; here is where conversion would take place 

가 레지스터에 이래로

, 것입니다 당신에게 10 진수 값으로 변환 한 다음 각 위치를 구분해야합니까?

+0

어떤 운영 체제 및 어떤 라이브러리에서 허용합니까? – duskwuff

+0

x86 Windows. 여러 라이브러리를 사용할 수 있다는 것을 알고 있지만 어셈블리 프로그래밍에 대해 더 자세히 배우려고하는 더 큰 베어 본 (bare-bones) 프로그램의 일부로이 작업을 수행했습니다. –

+0

그래픽 윈도우와 같은 Windows 또는 DOS 프롬프트와 같은 16 비트 MS-DOS 서브 시스템을 실제로 의미합니까? 그들은 서로 완전히 다릅니다. – duskwuff

답변

1

ASCII를 인쇄하는 방법과 각 위치를 구분하는 방법을 잘 모르겠습니다. 그래서 EAX의 값을 10 진수 ASCII로 변환하고 DS : EBX의 주소에 저장하는 방법을 보여 드리고자합니다. 최대 0FFFFFFFFh의 32 비트 값의 경우 십진수 10 자리 ASCII (4294967295)의 자리가 필요합니다. 예를 들어, 값이 십진수 150이면, ASCII 코드의 "0000000150"과 시작 부분에 "0"을 얻습니다.

 mov  cl, 0Ah    ; counter for ten decimal ASCII's 
     mov  edi, 1000000000 
P1: xor  edx, edx 
     div  edi 
     add  al, 30h    ; convert to ASCII 
     mov  esi, edx   ; save remainder 
     mov  [ebx], al   ; store ASCII to the address of DS:EBX 
     inc  ebx 
     mov  eax, edi 
     mov  edi, 0Ah 
     xor  edx, edx 
     div  edi 
     mov  edi, eax 
     mov  eax, esi 
     dec  cl 
     jnz P1 
+0

괜찮아 보인다. 그러나 만약 내가 앞의 0을 원하지 않는다면, 나머지 부분이 원래의 숫자와 같은지 확인하는 부분 뒤에 뭔가를 추가 할 수 있다고 생각합니다. 'cmp edx, esi' –