shuiyu 发表于 2017-7-9 23:51:10

《零基础入门学习汇编语言》第二十九讲

本帖最后由 shuiyu 于 2018-1-21 10:47 编辑

越努力,越幸运。欢迎大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指正,谢谢{:10_254:}

一、在代码段中使用数据
(1)编程计算以下8个数据的和,结果存在ax 寄存器中:
   0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H

解:一个是加了入口的,一个没加入口。



(2)程序第一行中的 “dw”的含义是定义字型数据。dw即define word(定义16个字型单元,十六位的);依葫芦画瓢DB就是定义8个字型数据。这些数据之间以逗号分隔。


(3)程序中的指令就要对这8个数据进行累加,可这8个数据在哪里呢?
解:由于它们在代码段中,程序在运行的时候CS中存放代码段的段地址,所以我们可以从CS中得到它们的段地址。(即数据就是存在CS这个段里)

(4)这8个数据的偏移地址是多少呢?
解:因为用dw定义的数据处于代码段的最开始,所以偏移地址为0,这8 个数据就在代码段的偏移0、2、4、6、8、A、C、E处。程序运行时,它们的地址就是CS:0、CS:2、CS:4、CS:6、CS:8、CS:A、CS:C、CS:E。

(5)后面的就是前面几讲中的循环,我就不详细讲了。

(6)如何让这个程序在编译后可以存系统中直接运行呢?
解:加入口(就是start)。
在没有加入口的程序中,对于小甲鱼教程中使用“-U 16f8:0”和“-U 13f8:10”翻译出来的结果不一样,我的理解是这样的:
见下图可以发现用两种不同的查看方法,第一种使得BX消失了(没被翻译出来)


原因:由于没有加入口,CPU就认为CS:0到CS:10也是数据的一部分,从而误读了指令;导致出现这些我们看不到的命令。(如果把IP改到10处,然后执行也是可以正常执行的)

(7)探讨end的作用:
end 除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。一开始我也以为入口是靠start通知编译器的,现在才知道原来是靠end通知的编译器。





谢谢小甲鱼带来的视频教程,感谢!! {:10_303:}


   
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记{:10_297:} 小白刚学,不对的请各位大佬指教,谢谢{:10_254:}

小甲鱼 发表于 2017-7-9 23:52:48

等你补齐~{:5_109:}

shuiyu 发表于 2017-7-10 00:56:10

小甲鱼 发表于 2017-7-9 23:52
等你补齐~

补齐了哟{:5_95:}
页: [1]
查看完整版本: 《零基础入门学习汇编语言》第二十九讲