|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面程序没问题。
不明白为什么要-g,才能看到data段的值传入了b800段。
不应该是执行完mov es:[si+720H],al后,data段的"w"传入后,-d就应该立刻可以查看的到b800段变化吗???
assume cs:code
data segment
db 'welcome to masm!' ;十六进制为77 65 6C 63 6F 6D 65 20-74 6F 20 6D 61 73 6D 21
data ends
code segment
start:
mov ax,data
mov ds,ax ;数据段段地址给ds welcome to masm! (数据段地址0770H给ds)
mov ax,0B800H
mov es,ax ;显存段地址ds (显存段地址B800H给es)
mov cx,10H ;循环16次 (每次给一个值,一个颜色。三排一起给)
mov si,0H ;定义显存段偏移值
mov di,0H ;定义数据段偏移值
s:
mov al,ds:[di] ;定义数据段的第一个字符给al (将"w"十六进制77H给al) ax变成B877H
inc di ;做好准备,为下次取数据段值
mov es:[si+720H],al ;将值al给显存(720H第一排)5 5 5 5 5,一行160字节五行800字节,三行welcome的话第一行就在12行(行中间),第12行分成 50列 14列 32列 14列 50列,第65列就是中间(列中间),但是汇编应该从0开始,所以是800+800+160+64=720H
mov es:[si+7c0H],al ;将值al给显存(7c0H第二排)
mov es:[si+860H],al ;将值al给显存(860H第二排)
inc si ;si+1,目的是跳到该值得颜色处
mov al,2h
mov es:[si+720H],al ;将绿色给显存
mov al,14h
mov es:[si+7c0H],al ;将绿底红色给显存
mov al,71h
mov es:[si+860H],al ;将白底蓝色给显存
inc si ;si+1,目的是接着跳,跳到到下一个值(值、颜色、值、颜色。。。)
loop s
mov ax,4c00h
int 21h
code ends
end start |
|