2012-03-06 3 views
0

조립 과정을 강의 중입니다. 이 코드는 화면을 지우고 4529를 입력하는 것입니다. 선생님이 일을 아주 잘 설명하기는하지만 아주 오래된 스타일입니다. HLA 나 매크로 등을 사용하는 대신이 스타일의 코드를 사용합니다. 이제 문제가 발생합니다. 정확한 코드를 .asm에 복사하여 붙여 넣고 지시에 따라 nasm -o 지시문을 사용하여 컴파일하더라도 프로그램은 아무 것도하지 않습니다. dosbox 내에서 실행하면 화면이 지워지지만 번호를 인쇄하지 못합니다. 내 32 비트 OS가 아무리 지원하지 않을 정도로 오래된 코드인가? 제발 도와주세요 - 나는이 코딩 스타일을 배울 필요가 있습니다 : 코스를 통과하기 위해, B : 강의 유인물은 그렇지 않으면 꽤 좋으며 ASM에 대한 큰 책을 사는 것을 주저합니다.조립품 코드가 nasm과 함께 작동하지 않습니다

 [org 0x0100] 
jmp start 
    clr:  mov ax, 0xb800 
      mov es, ax 
      mov di, 0 

    nxt:  mov word[es:di], 0x0720 
      add di,2 
      cmp di,4000 
      jnz nxt 
      ret 

prntnum: push bp 
      mov bp, sp 
      push es 
      push ax 
      push bx 
      push cx 
      push dx 
      push di 


      mov ax, 0x0b800 
      mov es,ax 
      mov ax,[bp+4] 
      mov bx, 10 
      mov cx, 0 



nxtdigit:  mov dx,0 
      div bx 
      add dl,0x30 
      push dx 
      inc cx 
      cmp ax,0 
      jnz nxtdigit 

      mov di,0 

nextpos:   pop dx 
      mov dh,0x07 
      mov [es:di],dx 
      add di,2 
      loop nextpos 

      pop di 
      pop dx 
      pop cx 
      pop bx 
      pop ax 
      pop es 
      pop bp 
      ret 2 




start:  call clr 
      mov ax, 4529 
      push ax   
      call prntnum 

      mov ax,0x4c00 
      int 0x21 
+0

개발 환경을 강사 추천하지 않았나요해야 할 수도 있습니다 ? –

+0

(거리 학습 아카이브 비디오 :) 텍스트 편집기에서 코드를 작성하고 nasm으로 컴파일하고 afd로 디버그하기 만하면됩니다. 나는 afd에서 매뉴얼을 찾을 수 없었다. 현재, 이것은 더 학기 이전 작품 같아서 동료들에게 물어볼 수 없습니다. –

+0

코드는 FWIW처럼 멋지게 보이므로 COM 파일이나 환경을 구축하는 방식과 관련이 있습니다. 대부분의 실제 DOS 상자에서 유효한 가정 인 0xB800의 VGA 어댑터의 비디오 메모리에 쓸 수 있다고 가정하지만, 항상 (가상) DOS 상자에 들어 있는지 여부는 알 수 없습니다. –

답변

0

문제가 해결되었습니다. - 내가 사용하는 검은 색 속성을 쓰고있어 보이지 않는 텍스트가있는 것 같습니다. 일단 그것이 바뀌면 모든 프로그램이 잘 돌아갑니다.

0

당신은 NASM에서 16 비트 코드를 사용하는 것, 당신은 코드가 16 비트 시작시 구문

[16 bit] 

함께 NASM 알려

관련 문제