l13127131w 发表于 2016-3-20 13:30:07

汇编语言(实验九)

下面程序没问题。
不明白为什么要-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

poiulp 发表于 2016-3-21 14:27:40

不错!

n0noper 发表于 2016-3-21 15:25:31

撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome的显示;
当然也可以每一步-t,然后-d看0B800地址处 数据变化情况,只是有点费劲而已。

如果执行出错,请贴出截图,大家一起讨论。

l13127131w 发表于 2016-3-22 08:50:58

n0noper 发表于 2016-3-21 15:25
撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome ...

谢谢,你真够热情的
页: [1]
查看完整版本: 汇编语言(实验九)