在装配中来回移动字符串

时间:2012-03-07 17:53:08

标签: string assembly matrix x86-16

给定一个包含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.

如果有人帮我解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分: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