汇编语言

汇编语言

情到浓时终转凉″ 提交于 2021-02-17 20:11:04
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“A DD”代表加法,“M O V”代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序 汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。 来源: oschina 链接: https://my.oschina.net/u/3823947/blog/1790789

汇编语言之计算器设计

五迷三道 提交于 2020-04-07 20:53:30
题目描述:     计算器设计。在PC机上实现从键盘读入数据,并完成加、减、乘、除的计算。要求:1)屏幕上显示一个主菜单,提示用户输入相应的数字键,分别执行加、减、乘、除4种计算功能和结束程序的功能。若按其他键,则显示提示输入出错并要求重新输入,并继续显示主菜单。分别按数字键“1”、“2”、“3”,则执行相应子模块1、2、3,进行两个字节与两个字节的加法、减法和乘法运算,并在屏幕上显示运算结果。按数字键“4”,执行模块4,进行两字节除一个字节的除法运算。按数字键“5”,程序退出,返回DOS;2)要使用到子程序。 代码: 1 enterline macro ;定义回车换行的宏指令 2 mov dl,13 3 mov ah,2 4 int 21h 5 mov dl,10 6 mov ah,2 7 int 21h 8 endm 9 10 DATAS SEGMENT 11 menus db' MENU$' 12 input db' Please select a function!$' 13 number db' 1-add, 2-sub, 3-mult, 4-div, 5-exit$' 14 a db'You are adding. Please enter two numbers separated by a space$' 15 s db'You are subtracting.

汇编

青春壹個敷衍的年華 提交于 2020-04-06 22:00:40
一、介绍 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 助记符是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 MOV AX , 30H ADD AX , 50H MOV [2100H] , BX HLT 汇编语言的主要特点: 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效的控制硬件系统 形成的可执行文件运行速度快、占用主存容量少 汇编语言程序中可以出现不同进制的数,但一定要有标识字母加以区别 数据的组织形式:位(bit)、字节(Byte)、字(Word)、双字(Dword) 无论是数据还是指令在计算机中都是以二进制形式存放的 无符号整数——所有有效位都当作数值处理,当然这样的数全部都是正数,故不保留符号位,常用于表示地址,或运算中表示计数值等 ASCII编码——在内存中使用一个字节(8位二进制数)存放一个字符(它的ASCII码),最高位没用(写0).在通信过程中最高位有时用于奇偶校验 数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H 带符号数的表示方法——采用补码表示法(补码存储、补码运算) 与、或、异或、非运算 二、计算机硬件相关知识 1、硬件 中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM

三步教你从零开始成为单片机达人

本小妞迷上赌 提交于 2020-04-06 14:31:50
无论是作为一名业余的电子爱好者还是一名电子行业的相关从业人员,掌握单片机技术无疑可以使您如虎添翼,为您的电子小制作或者开发设计电子产品时打开方便的大门! 学习单片机技术有一定的难度,不花费一番努力是很难学会的,但是只要不断努力就一定能成功,套用一句广告歌词:努力总有回报! 学习单片机最好从51系列开始, 第一是书多、资料多 ,而且掌握51技术的人多,碰到问题能请教的老师也就多了,51系列的实验芯片AT89C51价格低廉而且很容易买到,AT89C51芯片而且可以反复擦写1000次以上,对于初学者来说真是太合适了,就算以后考虑工业运用,也可以先学透51后再学其他类型的单片机,毕竟技术是相通的。 学习单片机的 第一步是看书 ,单片机是一个知识密集的东东,不看书是绝对不行的,北京航空航天大学出版社出版了大量单片机方面的好书,你可以直接登录他们的网站进行邮购。 学习单片机的 第二步是购买工具 ,单片机芯片必须借助编程器才能写入程序,站长用的编程器是一种性能较好的Genius NSP 通用编程器,通用编程器的特点是专为开发单片机和烧写各类存储器而设计的通用机型,它的编程可靠性高,支持的器件品种很多。 Genius NSP 通用编程器: 4Opins万用锁紧插座。适应绝大多数器件编程之所需。使用适配器能够支持非DIP封装器件的编程。 RS232窜口通讯。通讯波特率:57600bit/s 9V

天书夜读:从汇编语言到Windows内核编程笔记(4)

喜欢而已 提交于 2020-04-05 22:23:47
了解机器码 X86 所有指令的机器码长度不定,且连续排列,因此读取机器码的唯一方法是从头开始逐条解析指令。 nop 指令是单字节,可以用作填充替换长指令后的多余区域。 XDE32 反汇编引擎。 关于进一步机器码的构成分析,可以看 [6] 。 CPU 权限级与分页机制 Intel 的 x86 通过 ring 级别进行访问控制,共分四级。 R0 最高, R3 最低。现在的操作系统只分两级R0和R3.R0代表内核态,R3代表用户态。 运行模式: 实模式: CPU 启动后处于实模式。只能访问 1MB 内存,单任务,所有任务都运行在 R0 层。如 DOS 。 保护模式:支持分段、分页,可运行多任务。如 Linux,Window. 系统管理模式 (SMM) 虚拟 8086 模式:为了能在保护模式中运行原来能在实模式下运行的程序。 X86 处理器的地址分段模式包括如下形式: 平坦模式:线性地址(页目录,页,页中偏移)。 多段模式:如数据段,地址段, etc 。 32 位 windows 中, 0 ~ 4G 线性内存空间。 0 ~ 2G 为应用程序内存空间(处于其中每个进程都有独立的内存空间), 2G ~4 G 为系统内核空间(内核进程完全共享)。 R3 级无法访问 2 ~ 4G 内存空间。 X86 中, cr0~cr4 为控制寄存器。 Cr0 为控制 R0 是否可以写只读页, cr2

汇编语言 第二章

…衆ロ難τιáo~ 提交于 2020-03-24 02:28:32
1.寄存器 寄存器是CPU中的重要部分,书上学习的8086CPU 的寄存器都为16位的一共有14个。 其中:AX,BX,CX,DX(通用寄存器)为了保持兼容,以上每个寄存器都可以分为两个独立使用的8位寄存器。例如:AX分为AH和AL。 2.字的存储 8086CPU可以一次性处理两种尺寸的数据。(1)字节byte,1字节为8个bit位。(2)字word,由两个字节组成(分为高位和低位字节)。 关于进制:16进制后面是H,二进制后面是B,十进制后面无字母 3.汇编指令mov,add 汇编指令中不区分大小写,使用时应该注意操作对象的大小即数据存储位数是否一致,否则会报错。 4.CPU地址 物理地址:每个内存单元在空间中的唯一地址。 16位结构的CPU:(8086)一次能处理、传输、存储的地址大小为16位。 为了解决8086有20位地址总线但是8086是16位结构,即内部一次性处理、传输、存储的地址只有16位。8086CPU采用内部用两个16位地址来合成一个20位的物理地址。其中两个16位地址分别称为段地址和偏移地址。它们用过内部总线送到地址加法器。物理地址=段地址x16+偏移地址。段地址x16相当于在段地址后面多家一个0(因为是16位的)。段地址存放在段寄存器里,8086有4个段寄存器:CS、DS、SS、ES。其中CS为代码段寄存器。 注:一个地址可以有多种表示方法。 5.CS、IP

[汇编语言学习笔记][第二章寄存器]

十年热恋 提交于 2020-03-24 02:28:16
第二章 寄存器 8086有14个寄存器,分别为AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。 2.1 通用寄存器 8086CPU的所有寄存器都是16位,可以存放两个字节。 AX , BX , CX , DX 这四个寄存器通常用来存放一般性数据,被称为 通用寄存器 为了兼容之前的8位通用寄存器,将这4个寄存器拆开为8个8位寄存器分别为 H的含义High,高位,L的含义Low,低位 AX=AH+AL BX=BH+BL CX=CH+CL DX=DH+DL 2.2 字在寄存器的存储 因为..x8086架构的原因,未来的字长都指的的是16位(8086机器的一个寄存器大小) 2.3 几条汇编指令 mov ax,18 mov ah,78 add ax,8 mov ax,bx add ax,bx 寄存器的名称不区分大小写 若AX=00C5H,执行add al,93H 后等于多少呢 我原来以为可以变成0158H,看答案才知道因为只是al相见,所以进位必须舍去 答案为0058H 2.5 16位结构CPU 为什么叫16位呢? 运算器一次最多处理16位的数据 寄存器的最大宽度为16位 寄存器和运算器之间的通路为16为 2.6 8086CPU给出物理地址的方法 问题:8086有20位数据总线(1MB寻址能力),但是它是16位CPU内部总线(64K),只能送出16位地址

汇编语言第二章

。_饼干妹妹 提交于 2020-03-24 02:27:40
基本框架: 寄存器: 寄存器是cpu的主要部件,是程序员可以用指令读写的部件。 8086cpu有14个寄存器:AX,BX,CX,DX(通用寄存器)SI,DI,SP,BP(基址和变址寄存器)IP,(指令指针和标志寄存器)CS,SS,ES,DS(段寄存器) 通用寄存器:AX,BX,CX,DX。这4个寄存器可以分为两个可独立使用的8位寄存器(最大可以存放值为255的数据)来使用。其中0~7位为低位字节(L),8~15位为高位字节(H),如AH、AL。 一般用16进制来表示一个数据。 字在寄存器中的存储:8086cpu可以一次性处理字节和字两种尺寸的数据 字节:内存划分的基本单位:由8个bit位组成,可以放在8位寄存器中。 字:由两个字节组成,可以放在16位寄存器中。 双字:四个字节。 四字:八个字节。 汇编指令:mov、add: 进位导致的最高位的丢失。(这里的丢失不是cpu真的丢弃这个进位制,存放在别的地方,后面会学) 低位与高位寄存器是两个不同的寄存器,相互是独立的。 在进行数据传送或运算时要注意指令的两个操作对象的位数是一致的。 8086cpu给出物理地址(所有内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间都有唯一的地址)的方法:8086cpu有20位地址总线,但其又是16位结构。所以解决方案:物理地址=段地址*16+偏移地址。 段地址*16:左移4位(2进制

汇编语言第二章总结

情到浓时终转凉″ 提交于 2020-03-24 02:26:48
  在 CPU 中 主要部件是 寄存器 ,负责信息的存储功能,而这正是第二章的重点。   下面将知识点总结如下: 一、 不同CPU寄存器个数,结构都不同。8086CPU有14个寄存器分别为: AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW 这些寄存器都是16位,即可存放两个字节。 其中AX、BX、CX、DX为通用寄存器,都可分为两个可独立使用的8位寄存器来用。(前八位为H,后八位为L,例如AX可分为AH,AL) 二、 几条汇编指令 1.move xx,num   将num送入寄存器xx; 2.add xx,num   将寄存器xx的数值加上num; 3.move xx,yy   将寄存器yy的数值送入寄存器xx; 4.add xx,yy   将寄存器xx,yy的值相加并存在xx中; (其中英文大小写无影响mov ax,18和MOV AX,18含义相同) (其中num如62627为十进制数字,计算时应化为16进制F4A3H计算(H为16进制标识)) Tips:错误指令如下: mov ax,bl  不能在8和16位寄存器中传送数据 mov bh,ax  不能在16和8位寄存器中传送数据 mov al,20000  在8位寄存器中存放值超过极限255 add al,100H  不能将高于8位数据加到一个8位寄存器中 三、

【汇编语言】——第二章课后总结

若如初见. 提交于 2020-03-24 02:26:31
第二章最主要的内容如下: 1、通用寄存器:AX,BX,CX,DX; 2、汇编指令:mov add等指令; 3、8086CPU给出物理地址的方法(用两个16位地址合成的方法形成一个20位的物理地址); 4、CS(段寄存器) IP(指针寄存器 ); 5、修改CS,IP的指令; 一.通用寄存器 1. 8086CPU所有的寄存器都是16位的,可以存放两个字节。 2. AX、BX、CX、DX,4个寄存器通常用来存放一般性数据,被称为通用寄存器。 3. 一个16位的寄存器可以存储一个16位的数据。 思考:一个16位的寄存器所能存储的数据最大值为多少? 4. 8086CPU的AX、BX、CX、DX(16位寄存器)每个都可以分为两个可独立使用的8位寄存器来用: AX可分为AH、AL; BX可分为BH、BL; CX可分为CH、CL; DX可分为DH、DL; 二.几个常用的汇编指令 mov 和add   mov a, b 指把a=b;a通常是寄存器,如:mov ax,18指将18送入寄存器ax   add a, b指a=a+b; a通常是寄存器,如:add ax,18指将寄存器ax的数值加上18 注意:   由于通用寄存器只能存储16位的数据,所以如果将一个大于16位的数据放入寄存器就会损失最高位;   使用add,mov指令时,只能对相同类型的寄存器操作,即只能ax,bx,cx,dx之间操作不能