吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2074|回复: 16
收起左侧

[学习记录] (纯新人)汇编学习难点记录 ---0001H

[复制链接]
xiaoyunzhui 发表于 2021-11-20 23:57
以下内容是最近学习王爽老师的汇编语言的1-2章(1章全部,2章部分)的难点与心得总结性记录
写在前面:数据后加“H”表示为16进制,数字后加“B”表示2进制,后面什么也不加表示十进制。1、汇编指令是程序员所写,一般为英文形式,而计算机会通过汇编编译器将其转化为二进制机械码,再将其应用。
如图: image.png
2、指令与数据在储存器中并无不同,均是以二进制码的形式储存。
3、CPU利用储存线(一共叫地址总线)传输二进制数实现对数据储存位置的选择,例如有8根储存线的CPU将最多可输出从0~2^8=255(0~255)的位置选择。同理16根线的CPU可以选择0~2^16=65535的地址选择。
4、CPU通过数据线(一共叫数据总线)传输储存数据,一个字节用8根线传输,即:如8088CPU的数据总线为8根,则一次传输数据大小为1B,欲传输数据为89D8H时,需要分两次(第一次传输89H。第二次传输D8H)。
5、CPU还有控制总线来实现对其他外部器件的控制。
5、储存器分为ROM(只读储存器)与RAM(随机储存器)两种,我们进行数据写入的是RAM,也就是我们叫内存、显存的那玩意儿,而ROM基本用于BIOS(basic Input/Output System  基本输入/输出系统)。
一般逻辑结构如下图:
image.png
而对于我们写程序时的内存地址而言,是以下逻辑结构:
image.png
以下一段话暂时理解不透彻,但并不影响学习,日后学完回头再来看一次。
image.png
6、寄存器:CPU内部的储存数据的结构;
对于8086CPU 而言,其寄存器均为16位,每个可以存放2个字节,8086CPU中有AX、BX、CX、DX四个16位寄存器,但其上一代CPU中寄存器却只有8位,为了兼容上一代CPU的程序,8086CPU的每个寄存器均可分为两个8位寄存器。
16位寄存器中每位从右向左编号为0-15,每位可传输1位二进制数,16位分为2个8位寄存器的原理为,按照位次高低分,0-7为低位,分为8位寄存器称为AL(大概是AX的low的缩写吧?),与之对应的8~15为AH。
同理BX,CX,DX也可分为BH,BL,CH,CL,DH,DL.
看图理解:
image.png
同时因为16位寄存器分为两个8位寄存器,所以期中储存的数据的最大值也会因此而缩小2^8,例如下图:

image.png (注:在AX的寄存器内的数据表中只有15位,最前应如AH中,还有0,总值应为0100111000100000)
7、几条汇编指令
image.png
注意:
0)汇编语言不区分大小写;
1)汇编指令中可以自行分割AL、AH,将其作为一个单独的寄存器使用;
2)在运算过程中,如果运算完后的数据大小超出寄存器的大小例如,8位寄存器计算后出现3位的十六进制数,则会将最高位的数“舍去”(这儿指的是不显示,据说不会真正的丢弃);
3)在使用汇编指令时,应当确保寄存器的位数相同,即均为16位或者8位,不可交叉使用。(原因应该是位数不同会导致上一点的高位“舍去”)。
PS:正确例:
image.png
错误例:
image.png
8、16位的CPU意味着其内部的处理是以十六位进行,并具有如下一些结构特性:
image.png
简而言之:其内部以十六位数进行储存以及数据传输(与寄存器的概念相结合,其与内存的20条或者32条数据线可不匹配,与下一个点相结合)。
9、(与上一个点结合)8086CPU给出物理地址的方式
8086CPU为十六位CPU,其内部一次性处理、传输、储存,但其地址总线中共有20根地址线,即其储存地址大小最大为2^20,如果只使用16位会造成大量的损失,于是可以用两个16位地址合成20位地址的方法。
具体方法书上解释如下
image.png
换我理解就是,第一次十六位地址传输的数据大小在内部*16+第二次的数据
因为是16进制,所以*16会让第一段的地址末尾加上一个0,即类似于在十进制中扩大十倍一样。
如需要输出123C8时,因为16位只能输出4位16进制数,所以需要使用此方法,具体流程如下:
image.png
如此便得到了一个本来不能表示的十六进制数。
10、展开思考有关数据左移的本质
观察此表
image.png
这是2进制在末尾添“0”的方法,
10进制与16进制就是分别“*10”以及“*16”;
即X进制欲末尾添n个“0”(数据左移n位)
需要乘以X^n。
套用一个老师的例子,你现在需要给你朋友写一个四位数,然而现在你手上两张纸每一张只足够你写三位的数,那么你怎样传给你朋友这个四位数呢?
很简单,你将其中三个写在第一张纸上,剩下一个写在第二张纸上,作为人,你自己的思维里很自然的将第一张纸上的数扩大了十倍,然而计算机却需要将第一个数“*10”后再相加,这就是这个左移的本质。






(本次完)

免费评分

参与人数 3吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
AItechnology + 1 + 1 感谢分享,希望持续更新,很有用
woyucheng + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nc6 发表于 2021-11-21 01:05
大佬太厉害了
sergin 发表于 2021-11-21 06:48
king51999 发表于 2021-11-21 06:48
peanut98 发表于 2021-11-21 06:57
看过编译原理,晦涩难懂,楼主加油
夫子点灯 发表于 2021-11-21 07:23
虽然没看懂,但知道你很牛!
头像被屏蔽
tlf 发表于 2021-11-21 09:06
提示: 作者被禁止或删除 内容自动屏蔽
gamelover9527 发表于 2021-11-21 09:21
过来学习了,共同进步~
moshuiNW 发表于 2021-11-21 10:03
同样在学,一起努力把!
龍謹 发表于 2021-11-21 10:23
楼主你成功引起了我的关注,我成了你第一个听众。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 11:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表