自学汇编语言,问一个菜鸟的问题
自学汇编语言,问一个菜鸟的问题,寻址的时候, d fff0:0 出来的地址只到fff0:0070, 要补上ff,才会显示到 fff0:00f0ff是什么意思的缩写啊, cpu内部16位寄存器地址编辑后,是不是一一对应了外部寄存器的地址?run了内部寄存器地址的寻址过程,就执行了外部寄存器里的程序,是不是这个意思?先谢了!! 本帖最后由 jackz007 于 2020-3-26 23:45 编辑
ff 是什么的缩写?
十六进制的16个数: 1 2 3 4 5 6 7 8 9 a b c d e f
是的,没错,f 是个十六进制数,对应的十进制数值是 15
8086 CPU 的地址总线为 20 位,可寻址地址空间是 2 ^ 20 = 1048576 也就是 1 MB,但是,8086 CPU 的数据总线是 16 位的,也就是说,CPU 的字长是 16 位,所有的寄存器也都是 16 位的,通过寄存器可寻址的范围是 0 ~ 2 ^16 - 1 = 65535,也就是 64 KB,那么,问题就来了,CPU 的内存可寻址空间是 1 MB,而通过寄存器寻址只能达到 64 KB,1 MB 是 16 个 64 KB。怎么做才能对 1 MB 内存空间进行寻址呢,于是,就引入了 段:偏移的寻址方式,就是说,用两个 16 位数来联合表达一个 20 位的内存地址,段:偏移 表达方式到 20 位内存地址的计算关系是
20 位内存地址 = 段地址 x 10H + 偏移
在本例中,内存地址 fff0:0000 所对应的 20 位内存地址是 fff00,内存地址 fff0:0070 对应的 20 位内存地址是fff70,于是,我们会发现,不同的 段:偏移 可以表达相同的内存地址。
fff0:0000- fff00
ff00:0f00- fff00
f000:ff00- fff00
上面的三种形式表达的都是同一个内存地址 fff00,当然,这个地址的表达方式绝不仅仅这三种,还可以写出很多。
内存地址 fff00 已经很接近内存顶端了,这段地址属于 ROM BIOS 区域,是不可更改的,从 fff00 ~ fffff 还剩 256 个字节空间,在 debug 中,为了看到这 256 个字节的内容,可以使用命令:
d fff0:0 l100
谢谢 看看我这么理解对不对,在cpu内部的寄存器里,段寄存器根据不同数据的性质,储存了所有的段地址信息,通用寄存器储存了偏移地址信息,寻址过程就是把偏移地址数据先导入段寄存器,组合成20位地址,然后寻址,到内存,执行内存里的信息。这样就构成了最基本的cpu执行程序的流程。谢谢大神!顺带咨询一个问题,在学习完汇编,我想学一门高级语言作为编程工具,最好是和区块链技术挂钩的 hyber leagher 类似的应用,请问哪儿个语言比较适合我,我知道现在python很流行是因为人工智能。希望大神能指路。 本帖最后由 jackz007 于 2020-3-27 16:59 编辑
daywalker911 发表于 2020-3-27 06:08
看看我这么理解对不对,在cpu内部的寄存器里,段寄存器根据不同数据的性质,储存了所有的段地址信息,通用 ...
段寄存器中记录了一部分地址信息,偏移地址也记录了一部分地址信息,将二者合二为一,才能构成一个完整的二十位内存地址。
一个 DOS 程序所拥有的内存空间一般都分为三块,一块是数据区,用于存储全局变量、字符串等等,第二块是代码区,是用来储存程序指令的,第三块是堆栈区,可以用来临时保存变量,以及向函数传递调用参数。 谢谢 又遇到了一个小问题,在做课后练习,debug语言的时候,发现cs 的ip会随着执行的code加3,或者2, 如果说我想覆盖掉原来寄存器里的指令代码,我用a命令,直接会从ip+3开始, 即使我用了r或者e指令企图修改,a命令后的IP依旧不变,我翻了视频和书都没有找到答案,谢谢 daywalker911 发表于 2020-3-28 08:53
又遇到了一个小问题,在做课后练习,debug语言的时候,发现cs 的ip会随着执行的code加3,或者2, 如果说我 ...
回复我的帖子请点击帖子下边框上的 "回复" 按钮,然后,在新弹出的文本框中编写文本内容,否则,你留信息给我系统不会进行提醒,我就不能及时看到。
执行一条指令后,IP 会增加多少,取决于当前指令码的字节长度
13B7:0100 B80100 MOV AX,0001
这条指令的地址是 13B7:0100 ,指令码是 B8 01 00,长度是 3 个字节,那么,下一条指令的地址一定是 13B7:0103,跨度正好是当前指令的字节码长度。
在 debug 中,要想修改哪个地址的指令,直接用 a <偏移地址> 就可以了,比如,如果要修改上面那条指令,就用下面的命令
a 100
把新的汇编指令写进去就可以了。要注意的是,如果新指令与原来的指令长度不一致是要产生问题的。
jackz007 发表于 2020-3-28 11:19
回复我的帖子请点击帖子下边框上的 "回复" 按钮,然后,在新弹出的文本框中编写文本内容,否则 ...
wooow,谢谢!大神太厉害了! jackz007 发表于 2020-3-28 11:19
回复我的帖子请点击帖子下边框上的 "回复" 按钮,然后,在新弹出的文本框中编写文本内容,否则 ...
汇编第四章,遇到了个问题,因为视频是基于masm5.0的现在的masm32了,看了介绍,和一些视频,貌似编译的code变的复杂多了,我写了code,现在卡在assemble 和link code上了。 大神或者站内哪里可以查到masm32的简单操作介绍。。。编程的慢慢长路啊!!! jackz007 发表于 2020-3-28 11:19
回复我的帖子请点击帖子下边框上的 "回复" 按钮,然后,在新弹出的文本框中编写文本内容,否则 ...
外加因为现在都是在DOSBox下的虚拟机上操作汇编,是不是要mount 编译文件的位置,把masm的文件拷贝到文件目录下,进行编译。。。 做了一部分research:
1. mount 到程序所在的位置
2. path到 masm软件的所在位置
3 go to C:
4. 使用masm 本帖最后由 jackz007 于 2020-4-1 10:40 编辑
daywalker911 发表于 2020-4-1 01:00
外加因为现在都是在DOSBox下的虚拟机上操作汇编,是不是要mount 编译文件的位置,把masm的文件拷贝到文件 ...
你现在应该老老实实地学习 MASM 5.0,MASM32 和你没有任何关系,那是一个博士应该关注的东西,你目前只是个幼儿园的小朋友,学习的路还有很长,搞清自己的能力和处境很重要!!! jackz007 发表于 2020-4-1 10:37
你现在应该老老实实地学习 MASM 5.0,MASM32 和你没有任何关系,那是一个博士应该关注的东西,你 ...
好吧。。。我先去找个能下载masm5.0的地方 jackz007 发表于 2020-4-1 10:37
你现在应该老老实实地学习 MASM 5.0,MASM32 和你没有任何关系,那是一个博士应该关注的东西,你 ...
学到现在才刚刚发现,在指向内存地址的时候,是有一个物理地址和逻辑地址之分的,在汇编的这本书里,说0200:0 到0200:ff,是一个物理地址还是逻辑地址?现在看书有晕的地方就是,物理地址和逻辑地址,书里解释的时候并没有标注,是不是大部分的地址,说的都是逻辑地止,你用debug r看的时候,段地址指向的,又是哪儿一个?谢谢!! 本帖最后由 jackz007 于 2020-5-17 23:59 编辑
daywalker911 发表于 2020-5-17 22:04
学到现在才刚刚发现,在指向内存地址的时候,是有一个物理地址和逻辑地址之分的,在汇编的这本书里,说02 ...
0200:0 ~ 0200:ff是一段内存范围,对应的 20 位地址表达形式为 02000 ~ 020ff。
应该养成把 段+偏移 形式的内存地址转换为 20 位地址的习惯,这样,不管 段+偏移 在形式上怎么变,你都不会被迷惑到。
对于 DOS 操作系统而言,内存的物理地址与逻辑地址完全是一回事,没有任何区别。 首先,你的第一个问题,ff是什么意思?
答:“d fff0:0”fff0:0表示一个内存地址:内存地址为:fff0h*10h+0=fff00h(后面带h是16进制的意思)
你的第二个问题,cpu内部16位寄存器地址编辑后,是不是一一对应了外部寄存器的地址?
答:CPU是通过“地址加法器”进行地址“编辑”的。“编辑”方法:fff0h*10h+0=fff00h
“编辑”后,对应内存“物理地址”,但不是一一对应,
如:fff0:0 ffef:10ff00:f00等等很多个都对应“fff00h” 停了大半年,看第二遍王爽的书才稍微入门一点,再问个小问题, push内存单位里的数据到栈里, 我已经set好DS了,然后用push 【2】这个命令,debug说error。是debug的命令格式变了,毕竟这本书那么久了,现在都是在dosbox上面run的debug。是不是在具体写code的时候,编译器还是认可的这个命令,如果是的话,我就试试写code, 编译, run, 然后去debug里面看看寄存器的情况,确定命令执行了!先谢了!
现在发现,能写算法的都是大神啊,把现有的函数关系式,转化成计算机的code,我觉得都要烧掉许多脑细胞,他们要把实际问题函数化,再电脑语言化。真尼玛牛啊!!
PS:互联网公司给程序员划年龄太过分了!年轻时候贡献了那么多脑细胞,因为精力问题,就让人走,我很是看不惯,虽然我不是吃电脑饭的。
页:
[1]