鱼C论坛

 找回密码
 立即注册
查看: 1004|回复: 0

[汇编作业] 实验测试9显示 acsii

[复制链接]
发表于 2023-7-24 01:47:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


;显存地址 B8000H 开始 BFFFFH 共32kb空间  共8页 每页4kb
;第一页显示偏移
;000~09F显示第一行
;0A0~13F显示第二行
;显存可以25行 每行80个字符 每个字符2个字节 = 160字节
;每个字符占一个字 低位字符存储ASCII  高位字存储属性
;这里从第11开始  160*11 = 6E0
;每个中间开始 80字符-16字符/2各半 * 2个字节 = 40H
;那么起始位置是在 B8000H+6E0+40H = B8720 开始
assume cs:code,ds:data,ss:stack

data segment
        db 'welcome to masm!'                ;定义要显示的字符串(共16个字节)
        db  02h,24h,71h                                ;定义三种颜色属性
data ends

stack segment
        dw 8 dup(0)
stack ends

code segment

start:

                push  ax
                push  bx
                push  cx
                push si
                push di
               
                call show

                mov ax, 4c00h
                int 21h
               

show:               

                mov ax, data
                mov ds, ax
               
                mov ax, stack
                mov ss, ax
                mov sp, 10h
               
                xor bx,bx                ;bx清零,用来索引颜色
                mov ax,0b872h        ;算出屏幕第12行中间的显存的段起始位置放入ax中;把后面0扔了
               
                mov cx, 3                ;S3循环控制行数,外循环为3次,因为要显示三个字符串
                 
s3:                push cx                        ;
                push ax                        ;三个进栈操作为外循环s3保存相关寄存器的值
                ; push bx                        ;以防止它们的值在内循环中被破坏
               
                mov es, ax                ;此时es为屏幕第12行中间的显存的段起始位置
               
                mov si, 0                ;源头字符串
                mov di, 0                ;定位目标列
               
               
                mov cx, 10h                ;十6个字符串 内循环
               
               
s1:                mov al, ds:[si]                        ;源地址 数据

                mov ah, ds:10h[bx]                ;源地址 属性
               
               
                mov es:[di], al                        ;目标显存地址
               
                mov es:[di+1], ah                ;目标显存属性
                inc si
                add di, 2
                loop s1                                ;此循环实现偶地址  低位字符存储ASCII 字符
                add bx, 1


                pop ax
                add ax, 0ah                                ;mov ax,0b872h 前面把这个设置位启动段地址了 加偏移就好
                pop cx
                loop s3

                pop  di
                pop  si
                pop  cx
                pop bx
                pop ax
               
                ret
       

code ends
end start











































想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表