. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验九,刚做出来的,欢迎指导  [待解决] 回复[ 0次 ]   点击[ 252次 ]  
joneui
[帖 主]   [ 发表时间:2010-07-15 23:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-08 22:23
;welcome to masm! 共16个字符,一行是80个字符,字符串应该从第32列开始显示
;显示3行字符,一共是25行,所以字符串应该从第12行开始显示
;B8000H---B8F9FH是第一页显示的内存,一页中的坐标(行,列)的内存位置的计算:B8000+(行*80+列)*2

assume cs:codesg

data segment
    db 'welcome to masm!'        ;定义显示的字符
    db 02H, 24H, 71H                ;定义显示字符的颜色属性
data ends

stack segment
    db 16 dup (0)
stack ends

codesg segment
    start:mov ax, 0B800H
          mov ds, ax
          mov bx, 71EH                ;确定第一行字符串显示的起始位置

          mov ax, stack
          mov ss, ax
          mov sp, 10H
          
          mov si, 0                ;记录每行字符的颜色属性
          mov cx, 3
        s:push cx
          
          mov di, 0
          mov cx, 16
       s1:mov dx, data
          mov es, dx
          mov al, es:[di]
          mov ah, es:[16+si]

          mov ds:[bx], ax
          add bx, 2
          inc di
          loop s1

          pop cx
          inc si                ;修改字符串的属性
          add bx, 80H                ;修改显存的位置
          loop s

          mov ax, 4C00H
          int 21H
codesg ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved