. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
主题 : :  实验13代码  [待解决] 回复[ 9次 ]   点击[ 845次 ]  
ruder
[帖 主] [ 发表时间:2011-01-21 16:26 ] 
荣誉值:0
信誉值:0
注册日期:2011-01-02 12:37
assume cs:code

data segment
  db 'TEST SUCCESS', 0
data ends

code segment
;----------------------------------------------------------
;类型:中断例程
;功能:显示一个用0结束的字符串
;参数:dh=行号 dl=列号 cl=颜色 ds:si=字符串首地址
;----------------------------------------------------------
show_str:
  push es
  push ax
  push bx
  push si

  mov ax, 0b800h                         ;bx指向显存地址
  mov es, ax
  mov al, 0a0h
  mul dh
  mov bx, ax
  mov al, 2
  mul dl
  add bx, ax

  mov ah, cl                             ;保存颜色

show:                                    ;向显存中复制字符串
  mov al, [si]
  cmp al, 0
  je ok
  mov es:[bx], ax
  add bx, 2
  inc si
  jmp show

ok:
  pop si
  pop bx
  pop ax
  pop es
  iret

;----------------------------------------------------------
;功能:程序入口
;----------------------------------------------------------
main:
  mov ax, cs                             ;ds:si=复制的源地址
  mov ds, ax
  mov si, offset show_str

  xor ax, ax                             ;es:di=复制的目标地址
  mov es, ax
  mov di, 200h

  mov cx, offset main - offset show_str  ;cx=复制长度

  cld                                    ;复制代码
  rep movsb

  mov ds, ax                             ;修改中断向量
  mov ds:[7ch * 4], 200h
  mov ds:[7ch * 4 + 2], ax

  mov ax, data                           ;测试中断
  mov ds, ax
  xor si, si
  mov dh, 12
  mov dl, 30
  mov cl, 1100b
  int 7ch
  
  mov ax, 4c00h                          ;退出
  int 21h
code ends
end main
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved