硬件学习

上传人:小** 文档编号:46121899 上传时间:2018-06-22 格式:DOC 页数:17 大小:100KB
返回 下载 相关 举报
硬件学习_第1页
第1页 / 共17页
硬件学习_第2页
第2页 / 共17页
硬件学习_第3页
第3页 / 共17页
硬件学习_第4页
第4页 / 共17页
硬件学习_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《硬件学习》由会员分享,可在线阅读,更多相关《硬件学习(17页珍藏版)》请在金锄头文库上搜索。

1、第 1 章 汇编语言程序设计基础1第第1 1章章 汇编语言程序设计基础汇编语言程序设计基础1.1.2 数据定义数据定义通过数据定义语句可为数据项分配存储单元,并根据需要设置其初值。还可用符号代 表数据项,此时符号就与分配的存储单元相联系。代表数据项的符号本身称为变量名,与 之相对应的存储单元用于存放变量,所以常常就把这样的存储单元称为变量。 例例 1.1 定义字节数据 COUNTDB100;定义一个字节的存储空间,存放 100 BUFFDB3+4,5*6;定义两个字节的存储空间,存放 7,30 例例 1.2 定义字数据 FLAG1DW65530;定义一个字存储空间,存放 65530 FLAG2

2、DW0F020H;定义一个字存储空间,存放 0F020H 例例 1.3 定义没有初值的数据项 BUF1DW?,?;定义两个字存储空间,没有定义初值 例例 1.4 定义字符串 MESS1DB“HELLO!”;定义一个字符串,内容是 HELLO! MESS2DBH,E,L,L,O,!;定义一个字符串,内容是 HELLO! 例例 1.5 重复操作符 DUP BUF2DB5 DUP(0);定义 5 个字节的存储空间,初值均为 0 例例 1.6 使用 EQU 定义等值表达式 COUNTEQU234; 例例 1.7 使用等号定义 COUNT=234; 例例 1.8 使用$定义 $是一个特殊的地址表达式,表

3、示当前地址。 XDW0,1,2,4,8,4,2,1,0; LENDB$-X;变量 LEN 的值等于 181.21.2 汇编语言程序的结构汇编语言程序的结构汇编语言源程序建立在段结构的基础上,一个段就是一些指令和数据的集合。所以一 个汇编语言源程序,根据程序用途被划分成几段,如数据段、堆栈段、附加段和程序段 (代码段) ,用 CS、DS、SS、ES 段寄存器存放段值。这样就构造了源程序的基本格式: DATASEGMENT DATAENDS EXTRA SEGMENT EXTRA ENDS STACK1 SEGMENT STACK1 ENDS第 1 章 汇编语言程序设计基础2CODESEGMENT

4、 ASSUMECS:CODE,DS:DATA ASSUMESS:STACK1,ES:EXTRA START: MOVAX,DATA MOVDS,AX CODEENDS ENDSTART 结合上面的源程序结构格式,需要说明如下: (1)互相配对的 SEGMENT 和 ENDS 前的标号必须一样; (2)ASSUME 语言使汇编程序得知哪一段是数据段(DS) ,哪一段是堆栈段(SS) ,哪 一段是附加段(ES) ,哪一段是代码段(CS) 。除 CS 段以外,各个段寄存器的实际 值还要用 MOV 指令来赋予; (3)END START 表示源程序结束。 下面,我们通过一个简单的汇编语言程序来说明汇编

5、语言的结构 DSEGSEGMENT;数据段开始 DATA1 DB13H,26H DATA2 DW0 DSEGENDS;数据段结束 SSEGSEGMENTSTACK;堆栈段开始 SKTOPDB20 DUP(0) SSEGENDS;堆栈段结束 CSEGSEGMENT;代码段开始 ASSUMECS:CSEG,DS:DSEG ASSUMESS:SSEG START: MOVAX,DSEG;初始化数据段基址 MOVDS,AX MOVAX,SSEG;初始化代码段基址 MOVSS,AX MOVSP,LENGTH SKTOP;设置堆栈指针 MOVAL,DATA1 ADDAL,DATA1+1 MOVBYTE P

6、TR DATA2,AL MOVAH,4CH INT21H;返回 DOS CSEGENDS;代码段结束 ENDSTART;源程序结束 说明如下: (1)DSEG 是用户自定义的数据段的段名,SEGMENT 和 ENDS 分别为表示段开始和结束 的伪指令。 (2)SSEG 是堆栈段的段名,STACK 表示此段是程序运行时使用的堆栈段,连接程序要 求定义一个堆栈段,若无此段,连接程序指出“无堆栈段”错误。 (3)CSEG 是代码段的段名,一般要先用 ASSUME 语句指定哪一段是数据段,哪一段是 堆栈段和代码段,但是段寄存器的实际地址仍需 MOV 指令赋予。第 1 章 汇编语言程序设计基础3(4)E

7、ND START 说明,START 为程序的启动地址,即程序从这里开始执行,而 END 告 诉汇编程序源程序到此结束,对 END 后面的任何语句都不再进行汇编。命令格式功能说明A地址输入汇编指令C范围 起始地址对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元D范围显示指定范围内的内存单元内容E地址 字节值表用值表中的值替换从“地址”开始的内存单元内容F范围 字节值表用指定的字节值表来填充内存区域G=起始地址 断点地址从起点(或当前地点)开始执行,到终点结束H数值 1 数值 2显示二个十六进制数值之和、差I端口地址从端口输入L地址 驱动器号 扇区 扇区数从磁盘读M范

8、围 地址把“范围”内的字节值传送到从“地址”开始的单元N文件标识符 文件标识符指定文件名,为读/写文件做准备O端口地址 字节值向端口输出P=地址 指令数按执行过程,但不进入子程序调用或软中断Q退出 DEBUG,不保存正在调试的文件R寄存器名显示和修改寄存器内容S范围 字节值表在内存区域内搜索指定的字节值表。如果找到,显示起始地址,否则,什么也不显示T=地址 指令数跟踪执行,从起点(或当前地点)执行若干条指令U范围反汇编,显示机器码所对应的汇编指令W地址 驱动器号 扇区 扇区数向磁盘写内容,(BX、CX)为写入字节数下面对 DEBUG 命令作具体介绍: 1.内存显示命令 D(Dump Comma

9、nd) D 命令用来显示内存单元的值,包括下列两种格式: (1)D 显示由指定地址开始的若干内存单元的值。对于 80 列显示模式,显示 128 个字节。如 果未指定参数,则一个 D 命令的结束地址开始显示。若前面未用过 D 命令,则缺省从 CS:IP 开始显示。 (2)D 该命令显示由指定的所有内存单元的值。 执行 D 命令后,屏幕左边显示的是内存地址,中间是从该地址开始的若干字节值(十 六进制) ,右边是每个字节对应得 ASCII 字符,其中, “.”表示不可打印字符。 若只给出偏移地址,则使用 DS 当前值作为段地址。例如:D 2000:100 ;显示从 2000:0100H 开始的内存单

10、元的值D 100 ;显示从 DS:100H 开始的内存单元的值D CS:100 ;显示从 CS:100H 开始的内存单元的值 D ;显示从 CS:IP 开始的内存单元的值第 3 章 汇编语言程序设计实验42.寄存器命令 R(Register Command)R 命令用来显示和修改寄存器的值,包括下列两种格式。(1)R 显示所有寄存器和 8 个标志位的值,并反汇编 CS:IP 所指 的命令。 (2)R 显示指定寄存器的值,并等待用户键入新的值,按回车键结束 R 的命令。其中,只能是 8086 的 16 位寄存器 AX、BX、CX、DX、SP、BP、SI、DI、DS、ES、SS、CS、IP、与 F

11、(标志寄存器) 。其 中,显示的 8 个标志位的符号对应符号如下表所示。标志名称溢出 OF方向 DF中断 IF负号 SF零 ZF辅助进位 AF奇偶 PF进位 CF置位状态OVDNEINGZRACPECY复位状态NVUPDIPLNZNAPONC如果想修改标志寄存器的内容,可以输入如下命令。 -R F 屏幕将显示 8 个标志位的值,然后等待用户修改。只要输入这些符号就可以设置对应 标志位的值,键入符号的个数与顺序可以任意。3.反汇编命令 U(Unassemble Command)U 命令用来将二进制代码反汇编为汇编语言的符号指令,包括下列两种格式。(1)U从指令地址开始,反汇编若干字节。对于 80

12、 列显示模式,反汇编 32 个字节(为 了保证最后一条指令的完整性,可能会多于 32 个字节) 。若未指定地址,则从上 一个 U 命令的最后一个单元开始;若前面未用过 U 命令,则缺省为 CS:IP。(2)U 对指定范围的内存区进行反汇编。若只给出偏移地址,则使用 CS 当前值作为段 地址。执行 U 命令后,屏幕左边显示的内存地址,中间是机器代码,右边是对应的汇 编语言指令。4.运行命令 G(GO Command)G 命令的格式为:G= 其中,等号“=”后的指出程序执行的起始地址,如未指定,则缺省为 CS:IP。指定的段点最多为 10 个,也可以没有。若只给出偏移地址,则使用 CS 当前值作为

13、段地址。G 命令从指定地址开始执行内存中的程序,直到内存结束或遇到指定的任意断点 时停止执行。若遇到断点,则显示所有内存器和标志位的当前值以及要执行的下 一条命令;若程序正常结束,则显示“Program terminated normally”。说明:第 3 章 汇编语言程序设计实验5断点地址的次序是任意的。设置多个断点的好处在于当被调试程序有多条可能的执行路径时 ,使其不管沿哪个路径执行,都有可能在断点处停下来,以便检查 程序的执行情况。断点一经设定,DEBUG 用一条 INT3 指令取代断点处指令的操作码。当程序执行到一个断点地址时,立即停止,然后恢复所有断点处的指令,并取消全部断点,返回

14、 DEBUG 。如果设置的断点在 G 命令的执行过程中均未遇到,则程序执行完毕,不会恢复 断点处的指令。一旦程序执行完毕,若想再次执行,必须重新装入。对于 G 以及下面要介绍的 T 与 P 命令,等号“=”后的所有单元,必须是有效的 8086 指令代码,否则,会产生预想不到的结果。5.跟踪命令 T(Trace Command)T 命令的格式为:T = 其中,等号“=”后的指出程序执行的开始地址,如未指定,则缺省为 CS:IP。 若只给出偏移地址,则使用 CS 当前值作为段地址。T 命令从指定地址开始单步执行,执行的指令数由 决定。每条指令执行 后,都要显示所有寄存器和标志位的值以及下一条指令。

15、若未给出,则缺省为 1 。T 命令执行时,若遇到 CALL 或 INT 指令,会跟踪进入相应过程或中断服务程序内 部。对于带重复前缀(如 REP)的指令,每次重复执行算一步。6.退出命令 Q(Quit Command)Q 命令的格式为:Q使用此命令可退出 DEBUG。第第3 3章章 汇编语言程序设计实验汇编语言程序设计实验3.13.1 顺序程序设计顺序程序设计 程序程序 11 设 X 和 Y 均为 16 位无符号数,写一个求表达式 X+Y 值的程序。 程序清单如下: DSEG SEGMENT;数据段 X DW 1234H Y DW 5678HZ DW ? DSEG ENDS CSEG SEGMENT;代码段ASSUME CS:CSEG,DS:DSEG第 3 章 汇编语言程序设计实验6START: MOV AX,DSEG;段寄存器初值MOV DS,AXMOV AX,XADD AX,Y;求 x+y 和MOV Z,AX;保存MOV AH,4CHINT 21H;程序结束退出 CSEG ENDSEND START 思考题:思考题:本程序没有考虑进位的情况。如果考虑可能产生的进位,应如何修改程序? 扩展题:扩展题:设 X 和 Y 均为三字节无符号数,编制程序求其和,并将结果放置在 Z 开始的存储 单元。 程序程序 22 设 X、

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号