2012-03-06 4 views
0

Я изучаю сборку как часть своего курса. Этот код предназначен для очистки экрана, а затем введите 4529. Это довольно старый стиль школы, хотя наш учитель очень хорошо объясняет, поэтому я буду придерживаться этого стиля кода вместо использования HLA или макросов и т. Д. Теперь приступим к этой проблеме. Даже если я скопирую точный код в .asm и скомпилирую его с директивой nasm -o, как указано, программа ничего не делает. Если я запустил его в dosbox, он очистит экран, но не распечатает номер. код настолько древний, что моя 32-битная ОС не будет поддерживать его ни на что? пожалуйста, помогите - мне нужно изучить этот стиль кодирования: пройти курс, 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-файл или среду, в которой вы его запускаете. предполагает, что он может записывать видеопамять VGA-адаптера в 0xB800, что, безусловно, является допустимым предположением для большинства реальных DOS-боксов, но я не знаю, всегда ли это выполняется в (виртуальном) окне DOS. –

ответ

0

Проблема решена - кажется, я писал этот атрибут черного цвета, поэтому текст не был виден. После того, как это изменилось, все программы выполнены нормально.

0

Вы, кажется, использует 16 битный код в NASM, возможно, придется сказать NASM код 16 бит с синтаксисом

[16 bit] 

в начале

 Смежные вопросы

  • Нет связанных вопросов^_^