2012-03-07 6 views
0

25行80列の属性を持つ160列の場合 4文字の文字列「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

あなたは "SIを追加-2" で1つのマイナスを持っていることを意味しましたか? –

+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 
関連する問題