繁体   English   中英

如何用汇编语言打印垂直字符

[英]how to print vertical character in assembly language

有一些方法可以使用循环垂直打印字符,例如以汇编语言从(0,0)到(0,10)打印'l'。 我正在使用emu8086。 我的意思是在不更改列的情况下打印到另一行

org 100h

mov ax, 3
mov ah, 0
mov al, 3
int 10h         

mov cl,10
print:
mov ah,02 
mov bh,0                        
mov dh,cl  ;y
mov dl,0  ; x
int 10h 

mov ah,09  
mov bh,0     
mov bl,00Fh 
mov al,'l'
mov cx, 1  
int 10h 
loop print  

ret

产量

 mov ax, 3 mov ah, 0 mov al, 3 

这些说明应该做什么?
我猜你忘了写int 10h来设置80x25文本视频模式吗?


程序中的基本错误(全部被Ped7g的注释所覆盖 )是,您仅将CL寄存器初始化为循环计数器,其中loop指令取决于整个CX寄存器,而且您错误地对其进行了修改,因此可以将CX用于第二个目的。


...从(0,0)到(0,10)打印'l'...

  • 为了获得高效的程序,您需要在循环外尽可能多地放置指令。 在整个循环中, CX的重复计数, BH的显示页面, BL的display属性以及DL中的列都是不变的,因此可以放置在循环之外。
  • 您还应该避免使用loop指令,因为这几天的运行速度并不快。
  • 当您需要将值放入字节大小的寄存器(例如ALAH ,您应该努力使用字大小的AX寄存器通过单个操作进行操作。 BXCXDX寄存器也是如此。

下面的代码适用于上面的代码:

    ORG  256
    mov  ax, 0003h        ;BIOS.SetVideoMode AH=00h, Mode 80x25 AL=3
    int  10h
    mov  bx, 000Fh        ;Display page BH=0, Display attribute BL=0Fh
    mov  cx, 1            ;Repetition count CX=1
    mov  dx, 0A00h        ;Row DH=10, Column DL=0
print:
    mov  ah, 02           ;BIOS.SetCursor
    int  10h 
    mov  ax, 0900h + 'l'  ;BIOS.DisplayCharacter AH=09h, Character AL='l'
    int  10h
    dec  dh               ;Go one row up
    jns  print            ;Will stop when DH becomes -1
    ret                   ;Back to DOS (works for a .COM program)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM