2012-03-07 3 views
0

Учитывая матрицу с 25 строками и 80 столбцами, но с атрибутами ее 160 столбцов Мне нужно написать программу в сборке для перемещения четырехбуквенной строки «Fool» (скажем) для перемещения по ней матрицу назад и вперед.Перемещение строк назад и вперед в сборке

То, что я сделал до сих пор:

mov bx,0B800H 
mov ds, bx 
mov si, 1760 

mov cx,80 
FOOL: add si,-6 
mov [si], " " 
add si, 2 
mov [si], "F" 
add si, 2 
mov [si], "O" 
add si, 2 
mov [si], "O" 
add si,2 
mov [si],"L" 
loop FOOL 

mov cx, 80 
FOOOL: add si,-6 

mov [si], "F" 
add si, -2 
mov [si], "O" 
add si, 2 
mov [si], "O" 
add si,2 
mov [si],"L" 
add si,2 
mov [si], " " 
loop FOOOL 

mov ah,9 
int 21H 

Но с этим кодом, когда его вспять, последнее письмо приходит перед первым. Я новичок в сборке, я уже пробовал 8085, но это моя первая попытка 8086.

Я был бы признателен, если кто-нибудь поможет мне исправить эту проблему.

+0

вы имели в виду, чтобы иметь один минус в "добавить си, -2"? –

+0

@ 500-InternalServerError: Я знаю его неправильно, но я не могу заставить ничего работать иначе. – Quixotic

ответ

1

Это работает:

; compile with nasm: 
; nasm.exe fool.asm -f bin -o fool.com 
bits 16 
org 100h 

mov bx,0B800H 
mov ds, bx 
mov si, 80*11*2 ; 1760 

mov cx, 80+1-5 
FOOL: 
mov [si], byte " " 
add si, 2 
mov [si], byte "F" 
add si, 2 
mov [si], byte "O" 
add si, 2 
mov [si], byte "O" 
add si, 2 
mov [si], byte "L" 
sub si, 3*2 
call delay 
loop FOOL 

sub si, 1*2 

mov cx, 80+1-5 
FOOOL: 
mov [si], byte "F" 
add si, 2 
mov [si], byte "O" 
add si, 2 
mov [si], byte "O" 
add si, 2 
mov [si], byte "L" 
add si, 2 
mov [si], byte " " 
sub si, 5*2 
call delay 
loop FOOOL 

mov ax, 4c00h 
int 21h 

delay: 
pusha 
push ds 

mov ax, 0 
mov ds, ax 
mov bx, [46ch] 

d0: 
mov ax, [46ch] 
cmp ax, bx 
je d0 ; wait for another timer tick (once in ~55 ms) 

pop ds 
popa 
ret 
Смежные вопросы