2014-11-17 1 views
0

질문을 공식화하는 방법을 모르지만 최근에 어셈블리 학습을 시작했으며 바이트/단어 및 최종 결과 문자열로 작업하는 지점까지 도달했습니다. 뿐만 아니라 바이트/단어의 문자열이 될 것입니다 ... 내 질문은 어떻게 내 프로그램이 올바른 결과를 반환했는지 확인합니까? 어떤 방법이 있습니까? 방금 ​​다음과 같은 문제가 해결되었습니다. 문자열 S : 1, 2, 3, 4, 5, 6이 있고 각 요소가 연속 된 두 바이트의 합계를 나타내는 문자열 D를 작성해야합니다. S의 D : 3, 5, 7, 9, 11 올바른 결과를 얻었는지 어떻게 확인합니까?문자열을 사용한 어셈블리 작업 결과 검사

+0

에 지정된 라인에 많은 문자를 표시하는 것입니다. 손으로 검증 할 수 있습니다 (너무 많은 가능성이있는 경우 작동하는지 자신이 확신 할 수있는 충분한 예제를 수행하십시오). 또는 결과를 읽고 검증하는 독립적 인 프로그램 (다른 언어로도 가능)을 작성하십시오. 이 특별한 경우 작은 샘플 크기로 손으로 직접 작업하는 것이 가장 빠른 방법입니다. – lurker

+0

글쎄, 어셈블리는 저수준 언어이고 내가 아는 다른 것들과 매우 흡사하다고 말할 수는 없다. 나는 CPU (tasm, tlink, tdebug)를 통해 간단한 16 진수 결과를 확인하기 위해 사용 되었기 때문에 문자열 결과를 어떻게 든 체크 할 수 있다고 생각했다. – Katie44

+1

OK, 네가 묻고있는 것이 조금 불분명하다. 정확히 무엇을 확인하려고합니까? 프로그램에서 값을 출력하면 시각적으로 값을 확인할 수 있습니다. – lurker

답변

0

손으로 쓰는 어셈블리 구현의 정확성을 확인하려면 (정말 좋은 생각입니다) 다른 언어로 해당 프로그램을 작성할 수 있습니다. 두 프로그램에 동일한 입력을 제공하고 각 출력을 파일로 파이프 한 다음 파일에 diff - 유틸리티를 실행하십시오.
실행을 통해 프로그램을 추적하려는 경우 디버거에서 프로그램을 실행할 수 있습니다. 고급 소스 코드가있는 디버거의 편의 시설은 없지만 디버거에서 레지스터 내용과 메모리를 표시 할 수 있어야합니다.
gdb에서 i(nfo) reg(isters)을 사용하여 레지스터 상태를 표시 할 수 있습니다.

+0

이것은 좋은 생각처럼 들리지만, 아직 파일을 사용하는 방법과 정보 xD를 출력하는 방법을 배웠습니다. – Katie44

0

결과를 확인하는 간단한 솔루션은 어셈블리 언어에 반드시 특정되지 않은 질문 문자열

lea si, d 
mov cx, 4 ;replace size with the amount of elements in D; mustn't be zero 
new_row: 
push cx 
mov al, 10 
int 29h 
mov al, 13 
int 29h 
lodsb 
or al, al 
jz e 
mov cx, ax 
xor ch, ch 
mov al, 46 ;the character shown as many times as specified in the string (here: a dot .) 
next_char: 
int 29h ;the advantage of this function is, the output always shown at the screen, it cannot be pipelined. 
loop next_char 
e: 
pop cx 
loop new_row 
exit: 
mov al, 10 
int 29h 
mov al, 13 
int 29h