Ассемблерный код не работает с Nasm
Я изучаю сборку как часть моего курса. Этот код предназначен для очистки экрана, а затем введите 4529. Это довольно старый стиль, хотя наш учитель объясняет все очень хорошо, поэтому я буду придерживаться этого стиля кода вместо использования HLA или макросов и т. Д. Теперь перейдем к проблеме. Даже если я скопирую и вставлю точный код в.asm и скомпилирую его с помощью директивы nasm -o в соответствии с инструкциями, программа ничего не сделает. Если я запускаю его в dosbox, он очищает экран, но не может распечатать номер. код настолько древний, что моя 32-битная ОС не будет его поддерживать ни на что? пожалуйста, помогите - мне нужно выучить этот стиль кодирования для: пройти курс, b: материалы для лекций довольно хороши, в противном случае я не решаюсь купить большую книгу по ASM.
[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
2 ответа
Вы, кажется, используете 16-битный код в NASM, возможно, вам придется сказать nasm, что код 16-битный с синтаксисом
[16 bit]
в начале
Проблема решена - кажется, я писал с использованием атрибута черного цвета, поэтому текст не был виден. Как только это изменилось, все программы работают нормально.