汇编语言(实验九)
下面程序没问题。不明白为什么要-g,才能看到data段的值传入了b800段。
不应该是执行完mov es:,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: ;定义数据段的第一个字符给al (将"w"十六进制77H给al)ax变成B877H
inc di ;做好准备,为下次取数据段值
mov es:,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:,al ;将值al给显存(7c0H第二排)
mov es:,al ;将值al给显存(860H第二排)
inc si ;si+1,目的是跳到该值得颜色处
mov al,2h
mov es:,al ;将绿色给显存
mov al,14h
mov es:,al ;将绿底红色给显存
mov al,71h
mov es:,al ;将白底蓝色给显存
inc si ;si+1,目的是接着跳,跳到到下一个值(值、颜色、值、颜色。。。)
loop s
mov ax,4c00h
int 21h
code ends
end start 不错! 撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome的显示;
当然也可以每一步-t,然后-d看0B800地址处 数据变化情况,只是有点费劲而已。
如果执行出错,请贴出截图,大家一起讨论。 n0noper 发表于 2016-3-21 15:25
撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome ...
谢谢,你真够热情的
页:
[1]