Перемещение вперед и назад строк в сборке - PullRequest
0 голосов
/ 07 марта 2012

Учитывая матрицу с 25 строками и 80 столбцами, но с атрибутами в 160 столбцов, я должен написать программу в ассемблере, чтобы переместить четырехбуквенную строку (скажем, "Дурак") для перемещения по матрице вперед-назад.

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

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.

Буду благодарен, если кто-нибудь поможет мне решить эту проблему.

1 Ответ

1 голос
/ 07 марта 2012

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

; 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
...