汇编语言学习笔记--王爽

摘要:
##第1章基础知识1机器语言是机器指令的集合。2汇编语言的主题是汇编指令。3汇编指令或寄存器名称不区分大小写。

##第一章 基础知识

1 机器语言是机器指令的集合。机器指令是机器可以正确执行的命令,是一列二进制数字。
2 汇编语言的主题是汇编指令。编译器将汇编指令转换成机器指令。
- 汇编指令:机器码的助记符,有对应机器码;
- 伪指令:无对应机器码,由编译器执行;
- 其他符号:如+等,由编译器识别,无对应机器码。
3 指令和数据是应用上的概念,在内存或磁盘上,都是二进制信息。CPU通过指令流取指令,数据流取数据。 
4 地址总线决定CPU寻址能力;数据总线决定CPU与其他器件进行数据传送时的一次数据传送量;控制总线;
5 CPU通过总线向扩展插槽上的接口卡发送命令,接口卡根据CPU的命令控制外设工作。
6 对CPU来说,系统中所以存储器中的存储单元都处于一个统一的逻辑存储器中,容量受CPU寻址能力限制。这逻辑存储器即内存地址空间。
##第二章 寄存器
1 CPU由运算器、控制器、寄存器等构成,器件靠内部总线相连。
2 为兼容性,8086CPU的AX的低八位AL,高八位是AH寄存器,可作为独立的寄存器使用。
3 汇编指令或寄存器名称不区分大小写。
4 数据传送或运算时,指令的两个操作对象的位数应该是一致的。
5 CPU的16位结构指,运算器一次最多处理16位数据,寄存器最大宽度为16位,寄存器和运算器之间通路16位。
6 物理地址=段地址*16(基础地址)+偏移地址;
    内存没有分段,段的划分来自于CPU。
7 4个段寄存器:CS, DS, SS, ES。 IP为指令指针寄存器,CS:IP即为段地址:偏移地址。
8 mov指令不能修改CS,IP的值;
- jmp 段地址:偏移地址    修改CS, IP的值;是在debug中用的汇编指令,汇编编译器不认识;
- jmp 某一合法寄存器        修改IP值,把合法寄存器的值赋给IP。
9 debug命令: 
- r 查看改变寄存器内容; r ax
- d 查看内存内容;d 段地址:起始偏移地址  结尾偏移地址
- e 改写内存内容;e 起始地址 数据 数据 ...
- e 向内存写入字符,字符串,机器码等;
- U 将内存中内容解释为机器指令和对应汇编指令;
- T 执行CS:IP指向的内存单元处命令;
- A 以汇编指令的形式向内存写入指令;                
##第三章 寄存器
1 字:两个字节;高地址内存单元放字的高位字节;起始地址为N的字单元为N地址字单元。
2 [...] 表示一个内存单元的偏移地址;段地址取DS中数据;
    不支持数据直接送入段寄存器,需用寄存器中转;
    mov bx, 1000H
    mov ds, bx
    mov al, [0]
3 8086CPU入栈和出栈都是以字为单位的。
- 栈顶段地址在SS中,偏移地址在寄存器SP中。SS:SP指向栈顶元素,栈空时,SS:SP指向栈空间最高地址的下一个单元;执行push ax后,SS:SP指向栈中第一个元素;
- 入栈时,栈顶从高地址向低地址方向增长;
- 栈顶超界的问题要自己操心;栈空间是以特殊方式进行访问的内存空间;
4 push pop后可加寄存器,段寄存器,内存单元;本质是内存传送指令;
    push (1)SP减 (2)向SS:SP传送数据
    pop   (1)取SS:SP数据 (2)SP加
5 sub ax,ax机器码为2个字节;mov ax,0 机器码为3个字节。
6 数据段的段地址在DS中,代码段在CS中。
7 T命令在执行修改SS后,下一条指令也被执行。
##第四章 第一个程序
1 伪指令:
(1) XXX segment    ...    XXX ends
成对使用,用来定义一个段,XXX是段名,可存放代码、数据或当做栈空间来使用;
(2) end 汇编程序的结束标记
(3) assume 假设某一段寄存器和程序中的某一个用segments...ends定义的段相关联;
2 程序返回:
mov ax, 4c00H
int 21H
3 DOS有一个程序command.com,命令解释器,就是DOS系统的shell;
- DOS执行1.exe时,是正在运行的command将程序加载入内存;
- 设置CPU的CS:IP指向程序的第一条指令,使程序运行;  
- 程序运行结束后,返回到command中,CPU继续运行command。
4 编译(1.asm)  编译(masm 1.obj)  连接(link 1.exe)  加载(command)  内存中程序  运行(CPU);
5 debug跟踪程序运行 debug 1.exe; command加载debug,debug加载1.exe;CS:IP指向程序的第一条指令;
    单步执行到int 21,需要用P执行;用Q退出debug。
6 cx寄存器是通用寄存器,也是计数寄存器,cx还有一个功能是在程序最初始记录程序代码的字节数;
##第五章 [BX]和loop指令
1 [bx]指偏移地址;
    mov ax, [bx]    (ax)=((ds)*16+(bx))
    mov [bx], ax    ax数据放入(ds)*16+(bx)地址处
    inc bx    bx内容加一
2 通常loop实现循环功能,cx存放循环次数;
    mov cx, 循环次数
s: (标号,代表地址,地址处有指令)
    循环执行的程序段
    loop s
3 汇编源程序中,数字不能以字母开头;
4 debug中 g 0012 使程序执行到CS:IP指向处,IP=0012H;
p 将循环一次执行完   
5 编译器将[0]解释为0,访问[0]写为ds:[0]形式;debug正常;用于显式指明内存单元段地址的ds:  cs:  es:  ss: 被称为段前缀;
6 DOS方式下,0:200~0:2ff空间没有系统或其他程序的数据或代码。
##第六章 包含多个段的程序
1 end 通知编辑器程序结束,还可通知编辑器程序的入口;
可执行文件由描述信息和程序组成。描述信息是编译、连接程序对源程序中的伪指令进行处理得到的消息;
start:   ...   end start指明程序入口;
2 dw定义字型数据
3 程序有多个段,段名代表段地址,偏移地址看他在段中的位置;不允许数据直接送入段寄存器;
4 编程
##第七章 更灵活的定位内存地址的方法
1 and 按位与 相应位置0; or 按位或,相应位置1;
2 [bx+200] 偏移地址为bx中数值加上200,亦写为:200[bx]或[bx].200
3 si和di是和bx功能相近的寄存器,不能分成两个8位寄存器来使用;
[bx+si]表示一个内存单元,偏移地址为(bx)+(si),亦为[bx][si];
[bx+si+idata] 200[bx][si] [bx].200[si] [bx][si].200;
4 一个字母的大小写的区别还在于:0~7位上的第5位如果是1,则为小写,如果为0,则为大写。也就是说不管其第5位如何,将其转为1,并保持其他位的数值不变,都可以得到小写。
##第八章 数据处理的两个基本问题
1 可以用在[]中进行内存单元的寻址:bx,si,di,bp;可以单个出现,或以4种组合出现:bx和si, bx和di, bp和si, bp和di; 其中[bp]的段地址默认在ss中;
2 数据的位置:
- 立即数(idata):直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中);
- 寄存器

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows10上使用SourceInsight阅读mysql源码基础面试题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python集成开发环境(IDE:Integrated Development Environment): PyCharm

原文地址:https://www.runoob.com/python/python-install.html IDE下载安装 PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统。 PyCharm 功能 : 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测...

虚拟机CentOS7三台集群配置网络

准备工作,VMware中安装一台Centos7,然后完全克隆出两个,一共三台虚拟机,下面是对三台虚拟机的网络进行配置    这三台环境一模一样,分别命名为:Master、Node1、Node2,在配置网络之前,三台虚拟机先同时开启,开始集群网络配置: 第一、进入虚拟机网络编辑器,选择VMnet8, 选择NAT模式,确定子网IP段,我的电脑一进来默认是192...

倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-T_AmsNetID是什么

该参数是包含六个数字类似于IP地址的字符串形式,例如"1.1.1.2.7.1",如果为空字符串,则默认使用本机的AmsNetID 你可以右击贝福的图标,然后点击About查看当前本机的ID   TC3修改TwinCAT AMS NET地址: 右击任务栏中TwinCAT图标,Router,Change AMS NetId,然后重新输入  ...

1、PyCharm的下载、安装

PyCharm 是python编辑器中,比较顺手的一个。而且可以跨平台,在macos和windows下面都可以用。 (1)安装依赖-JDK 因为pycharm(python IDE)是用Java编写的,所以必须要安装JDK才可以运行。 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/...

Mac地址表、STP与RSTP原理

Mac地址:交换机转发二层帧的数据库 结构:VLAN+来源+Mac地址+接口 表建立:交换机会把数据帧进入接口的源Mac记录,一个接口可以记录多个Mac。 表老化:表项中的每个记录计时器舒心都有计时器(300s),计数器启动——当该记录没有数据帧查询时就会倒计时,一旦有数据帧查询 端口安全:1.攻击                     Mac地址洪泛攻...

配置虚拟机的ip地址,dns地址以及hosts

静态ip地址 BOOTPROTO=static IPADDR=注意要和宿主机的ip前3部分保持一致,最后的地址进行修改即可 NETMASK=255.255.255.0--和宿主机保持一致 GATEWAY=网关要和宿主机保持一致 service network restart 重启网络 ip addr查看网路地址信息 配置DNS 检查NetManager的状...