用角色构图屏幕

时间:2014-11-29 10:55:57

标签: assembly x86 dos masm

我想填满屏幕边缘(80 * 25分辨率,但主要问题是我不能写到最后一行)所以它像80 * 24分辨率我的框架 我还有其他一些问题。我会将这些问题添加到评论中:

    Code    Segment
    assume CS:Code, DS:Data, SS:Stack

Start:
    mov    ax, Code
    mov    DS, AX


    ;>>>>>>>>>>>>>>>>
    ;*              $
    ;*              $   
    ;*              $ 24 line
    ;<<<<<<<<<<<<<<<< 25 line

;But what i get is

    ;****************
    ;*              $
    ;*              $   
    ;*              $ 23 line
    ;<<<<<<<<<<<<<<<< 24 line

;If i try to use 24 iteration in the second cyclus(Line1) i get:

    ;>>>>>>>>>>>>>>>>
    ;*              $
    ;*              $   
    ;*              $
    ;*              < 24 line
    ;<<<<<<<<<<<<<<<  25 line



    mov ax,03h
    int 10h
    xor dx,dx

    xor dx,dx
    push dx

    mov cx,80
Line:   
    pop dx
    xor bx,bx
    mov ah,02h
    int 10h

    inc dl
    push dx

    mov dl,'>'
    mov ah,02h
    int 21h
loop Line


pop dx
dec dl
inc dh
push dx

    mov cx,23
Line1:   
    pop dx
    xor bx,bx
    mov ah,02h
    int 10h

    inc dh
    push dx

    mov dl,'$'
    mov ah,02h
    int 21h
loop Line1

 pop dx
 dec dh   
 push dx

     mov cx,80
Line3:   
    pop dx
    xor bx,bx
    mov ah,02h
    int 10h

    dec dl
    push dx

    mov dl,'<'
    mov ah,02h
    int 21h
loop Line3


;Hier the DX register is crashed somehow and i need to set it manually
;Do you know why?

 pop dx
 mov dh,22
 mov dl,0
 ;dec dh   
 ;dec dl

 push dx

     mov cx,22
Line4:   
    pop dx
    xor bx,bx
    mov ah,02h
    int 10h

    dec dh
    push dx

    mov dl,']'
    mov ah,02h
    int 21h
loop Line4



    xor ax,ax
    int 16h




ProgramEnd:
    mov ax,4c00h
    int 21h   
    pop bx

Code    Ends

Data    Segment

Data    Ends

Stack    Segment

Stack    Ends
    End    Start

1 个答案:

答案 0 :(得分:1)

循环后,堆栈上的DX会显示下一个位置。

1)删除dec dh之前的Line3。 “下一行”就是右边一行。

2)Line4之前的“下一个”列是“从00开始”= FF。将dec dl更改为inc dl,您可以删除手动调整。

3)int 21h / ah = 02h打印字符移动光标。如果光标离开窗口(右下角),它将滚动。使用不移动光标的功能。所以改变

mov dl,'<'
mov ah,02h
int 21h

mov ah, 09h
mov bx, 7
mov al, '<'
int 10h