




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档 1欢迎下载 汇编语言入门教程 2007 04 29 22 04 对初学者而言 汇编的许多命令太复杂 往往学 习很长时间也写不出一个漂漂亮亮的程序 以致妨碍了我们学习汇 编的兴趣 不少人就此放弃 所以我个人看法学汇编 不一定要写 程序 写程序确实不是汇编的强项 大家不妨玩玩 DEBUG 有时 CRACK 出一个小软件比完成一个程序更有成就感 就像学电脑先玩 游戏一样 某些高深的指令事实上只对有经验的汇编程序员有用 对我们而言 太过高深了 为了使学习汇编语言有个好的开始 你 必须要先排除那些华丽复杂的命令 将注意力集中在最重要的几个 指令上 CMP LOOP MOV JNZ 但是想在啰里吧嗦的教科书中完 成上述目标 谈何容易 所以本人整理了这篇超浓缩 用 WINZIP WINRAR 依次压迫 嘿嘿 教程 大言不惭的说 看通 本文 你完全可以 不经意 间在前辈或是后生卖弄一下 DEBUG 很有成就感的 试试看 那么 这个接下来呢 Here we go 阅读时看不懂不要紧 下文必有分解 因为汇编是通过 CPU 和内存跟硬件对话的 所以我们不得不先了解 一下 CPU 和内存 关于数的进制问题在此不提 是可以执行电脑所有算术 逻辑运算与基本 I O 控制功能的 精品文档 2欢迎下载 一块芯片 一种汇编语言只能用于特定的 CPU 也就是说 不同的 CPU 其汇编语言的指令语法亦不相同 个人电脑由 1981 年推出至今 其 CPU 发展过程为 8086 80286 80386 80486 PENTIUM 还有 AMD CYRIX 等旁支 后面兼容前面 CPU 的功能 只不 过多了些指令 如多能奔腾的 MMX 指令集 增大了寄存器 如 386 的 32 位 EAX 增多了寄存器 如 486 的 FS 为确保汇编程序可以 适用于各种机型 所以推荐使用 8086 汇编语言 其兼容性最佳 本 文所提均为 8086 汇编语言 寄存器 Register 是 CPU 内部的元件 所以在寄存器之间的数据传送非常快 用途 1 可将寄存器内的数 据执行算术及逻辑运算 2 存于寄存器内的地址可用来指向内存的 某个位置 即寻址 3 可以用来读写数据到电脑的周边设备 8086 有 8 个 8 位数据寄存器 这些 8 位寄存器可分别组成 16 位寄存器 定义段 assume cs prognam 把上面定义段的段基址放入 CS mov cx 100h 装入循环次数 mov dl 0 装入第一个 ASCII 码 随后每次循环装入新码 next mov ah 2 int 21h inc dl INC 递增指令 每次将数据寄存器 DL 内的数值加 1 loop next 循环指令 执行一次 CX 减 1 直到 CX 为 0 循环停 止 int 20h 精品文档 19欢迎下载 prognam ends 段终止 end 汇编终止 在汇编语言的源程序中 每一个程序行都包含三项元素 start mov dl 1 装入第一个 ASCII 码 随后每次循环装入新 码 标识符 表达式 注解 在原始文件中加上注解可使程序更易理解 便于以后参考 每行注 解以 与程序行分离 编译器对注解不予理会 注解的数据不 会出现在 OBJ EXE 或 COM 文件中 由于我们在写源程序时 并不知 道每一程序行的地址 所以必须以符号名称来代表相对地址 称为 标识符 我们通常在适当行的适当位置上 键入标识符 标识符 label 最长可达 31 个字节 因此我们在程序中 尽量以简洁的 文字做为标识符 现在 你可以将此 ASCII ASM 文件编译成 ASCII COM 了 1 MASM ASCII 2 LINK ASCII 3 EXE2BIN ASCII ASCII COM 注意 当你以编译器汇编你设计的程序时 常会发生打字错误 标 识符名称拼错 十六进制数少了 逻辑错误等 汇编老手常给新 人的忠告是 最好料到自己所写的程序一定会有些错误 别人告诉 我的 如果第一次执行程序后 就得到期望的结果 你最好还是在 精品文档 20欢迎下载 检查一遍 因为它可能是错的 原则上 只要大体的逻辑架构正确 查找程序中错误的过程 与写程序本身相比甚至更有意思 写大程 序时 最好能分成许多模块 如此可使程序本身的目的较单纯 易 于撰写与查错 另外也可让程序中不同部份之间的界限较清楚 节 省编译的时间 如果读程序有读不懂的地方最好用纸笔记下有关寄 存器 内存等内容 在纸上慢慢比划 就豁然开朗了 下面我们将写一个能从键盘取得一个十进制的数值 并将其转换成 十六进制数值而显示于屏幕上的 大程序 前言 要让 8086 执行 这样的功能 我们必须先将此问题分解成一连串的步骤 称为程序 规划 首先 以流程图的方式 来确保整个程序在逻辑上没有问题 不用说了吧 什么语言都要有此步骤 这种模块化的规划方式 称之为 由上而下的程序规划 而在真正写程序时 却是从最小的 单位模块 子程序 开始 当每个模块都完成之后 再合并成大程 序 这种大处著眼 小处著手的方式称为 由下而上的程序设计 我们的第一个模块是 BINIHEX 其主要用途是从 8086 的 BX 寄存器 中取出二进制数 并以十六进制方式显示在屏幕上 注意 子程序 如不能独立运行 实属正常 binihex segment 精品文档 21欢迎下载 assume cs binihex mov ch 4 记录转换后的十六进制位数 四位 rotate mov cl 4 利用 CL 当计数器 记录寄存器数位移动次数 rol bx cl 循环寄存器 BX 的内容 以便依序处理 4 个十六进制数 mov al bl 把 bx 低八位 bl 内数据转移至 al and al 0fh 把无用位清零 add al 30h 把 AL 内数据加 30H 并存入 al cmp al 3ah 与 3ah 比较 jl printit 小于 3ah 则转移 add al 7h 把 AL 内数据加 30H 并存入 al printit mov dl al 把 ASCII 码装入 DL 精品文档 22欢迎下载 mov ah 2 int 21h dec ch ch 减一 减到零时 零标志置 1 jnz rotate JNZ 当零标志未置 1 则跳到指定地址 即 不等 则转移 int 20h 从子程序退回主程序 binihex ends end 利用循环左移指令 ROL 循环寄存器 BX BX 内容将由第二个子程序提 供 的内容 以便依序处理 4 个十六进制数 1 利用 CL 当计数器 记录寄存器移位的次数 2 将 BX 的第一个十六进制值移到最右边 利用 AND 逻辑 与 运算 对应位都为 时 其结果为 其余 情况为零 把不要的部份清零 得到结果 先将 BL 值存入 AL 中 再利用 AND 以 0Fh 00001111 将 AL 的左边四位清零 由于 到 的 ASCII 码为 30h 到 39h 而 到 之 ASCII 码为 41h 到 46h 间断 精品文档 23欢迎下载 了 7h 所以得到结果 若 AL 之内容小于 3Ah 则 AL 值只加 30h 否则 AL 再加 7h ADD 指令会将两个表达式相加 其结果存于左边表 达式内 标志寄存器 Flag Register 是一个单独的十六位寄存器 有 9 个标志位 某些汇编指令 大部份是涉及比较 算术或逻辑运 算的指令 执行时 会将相关标志位置 1 或清 0 常碰到的标志位 有零标志 ZF 符号标志 SF 溢出标志 OF 和进位标志 CF 标志位保存了某个指令执行后对它的影响 可用其他相关指令 查 出标志的状态 根据状态产生动作 CMP 指令很像减法 是将两个 表达式的值相减 但寄存器或内存的内容并未改变 只是相对的标 志位发生改变而已 若 AL 值小于 3Ah 则正负号标志位会置 0 反之则置 1 JL 指令可解释为 小于就转移到指定位置 大于 等 于则向下执行 CMP 和 JG JL 等条件转移指令一起使用 可以形 成程序的分支结构 是写汇编程序常用技巧 第二个模块 DECIBIN 用来接收键盘打入的十进制数 并将它转换成 二进制数放于 BX 寄存器中 供模块 1 BINIHEX 使用 decibin segment assume cs decibin mov bx 0 BX 清零 精品文档 24欢迎下载 newchar mov ah 1 int 21h 读一个键盘输入符号入 al 并显示 sub al 30h al 减去 30H 结果存于 al 中 完成 ASCII 码转二进制 码 jl exit 小于零则转移 cmp al 9d jg exit 左 右则转移 cbw 8 位 al 转换成 16 位 ax xchg ax bx 互换 ax 和 bx 内数据 mov cx 10d 十进制数 10 入 cx mul cx 表达式的值与 ax 内容相乘 并将结果存于 ax 精品文档 25欢迎下载 xchg ax bx add bx ax jmp newchar 无条件转移 exit int 20 回主程序 decibin ends end CBW 实际结果是 若 AL 中的值为正 则 AH 填入 00h 反之 则 AH 填入 FFh XCHG 常用于需要暂时保留某个寄存器中的内容时 当然 还得一个子程序 CRLF 使后显示的十六进制数不会盖掉先 输入的十进制数 crlf segment assume cs crlf 精品文档 26欢迎下载 mov dl 0dh 回车的 ASCII 码 0DH 入 DL mov ah 2 int 21h mov dl 0ah 换行的 ASSII 码 0AH 入 AH mov ah 2 int 21h int 20 回主程序 crlf ends end 现在我们就可以将 BINIHEX DECIBIN 及 CRLF 等模块合并成一个大 程序了 首先 我们要将这三个模块子程序略加改动 然后 再写 一段程序来调用每一个子程序 精品文档 27欢迎下载 crlf proc near mov dl 0dh mov ah 2 int 21h mov dl 0ah mov ah 2 int 21h ret crlf endp 类似 SEGMENT 与 ENDS 的伪指令 PROC 与 ENDP 也是成对出现 用来 识别并定义一个程序 其实 PROC 真正的作用只是告诉编译器 所 调用的程序是属于近程 NEAR 或远程 FAR 一般的程序是由 DEBUG 直接调用的 所以用 INT 20 返回 用 CALL 指令所调用的 精品文档 28欢迎下载 程序则改用返回指令 RET RET 会把控制权转移到栈顶所指的地址 而该地址是由调用此程序的 CALL 指令所放入的 各模块都搞定了 然后我们把子程序组合起来就大功告成 decihex segment 主程序 assume cs decihex org 100h mov cx 4 循环次数入 cx 由于子程序要用到 cx 故子程序要将 cx 入栈 repeat call decibin 调用十进制转二进制子程序 call crlf 调用添加回 换行符子程序 call binihex 调用二进制转十六进制并显示子程序 call crlf 精品文档 29欢迎下载 loop repeat 循环 4 次 可连续运算 4 次 mov ah 4ch 调用 DOS21 号中断 4c 号功能 退出程序 作用跟 INT 20H int 21H 一样 但适用面更广 INT20H 退不出时 试一下它 decibin proc near push cx 将 cx 压入堆栈 exit pop cx 将 cx 还原 retdecibin endp binihex proc near push cx pop cx retbinihex endp crlf proc near push cx pop cx retcrlf endpdecihex ends end CALL 指令用来调用子程序 并将控制权转移到子程序地址 同时将 CALL 的下行一指令地址定为返回地址 并压入堆栈中 CALL 可分 为近程 NEAR 及远程 FAR 两种 1 NEAR IP 的内容被压入堆 栈中 用于程序与程序在同一段中 2 FAR CS IP 寄存器的内容 精品文档 30欢迎下载 依次压入堆栈中 用于程序与程序在不同段中 PUSH POP 又是一对 指令用于将寄存器内容压入 弹出 用来保护寄存器数据 子程序 调用中运用较多 堆栈指针有个 后进先出 原则 像 PUSH AX PUSH BX POP BX POP AX 这样才能作到保护数据丝毫不差 工学 学科代码 08 是指工程学科的总称 包含 仪器仪表 能源动力 电气信息 交通运输 海洋工程 轻工纺织 航空航天 力学 生物工程 农业工程 林业工程 公安技术 植物生产 地矿 材料 机械 食品 武器 土建 水利 测绘 环境与安全 化工与制药 等专业 工学分类 工学 代码 08 0801 力学 080102 固体力学 080103 流体力学 080104 工程力 学 0802 机械工程 080201 机械制造及其自动化 080202 机械电子 工程 080203 机械设计及理论 080204 车辆工程 0803 光学工程 不设二级学科 0804 仪器科学与技术 0805 材料科学与工程 080501 材料物理与化学 0806 冶金工程 080603 电子信息工程 0807 动力工程及工程热物理 080703 动力机械及工程 0808 电气工程 080801 电机与电器 080802 电力系统及其自动 精品文档 31欢迎下载 化 080804 电力电子与电力传动 080604 通信工程 0809 电子科学与技术 080902 电路与系统 080904 电磁场与微 波技术 0810 信息与通信工程 081001 通信与信息系统 081002
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年德阳市事业单位公开考试招聘工作人员笔试考前自测高频考点模拟试题及1套参考答案详解
- 2025北京市怀柔区卫生健康委员会所属事业单位招聘25人模拟试卷及一套答案详解
- 2025广东惠州市博罗县东部自来水有限公司招聘及模拟试卷参考答案详解
- 2025年烟台海阳市卫生健康局所属事业单位公开招聘工作人员(58人)考前自测高频考点模拟试题及一套参考答案详解
- 2025贵州警察学院第十三届贵州人才博览会引才4人模拟试卷及答案详解(历年真题)
- 2025广东广州市海珠区招聘事业单位工作人员19人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年潍坊诸城市公开招聘部属公费师范毕业生(5名)模拟试卷及一套参考答案详解
- 2025年上半年四川阿坝州考核招聘紧缺学科教师模拟试卷及1套完整答案详解
- 2025中国电信重庆公司春季校园招聘笔试题库历年考点版附带答案详解
- 2025中国中原面向社会公开招聘笔试题库历年考点版附带答案详解
- 介绍莫兰迪的课件
- 进位制完整版本
- DB32/T+4860-2024+电镀园区环境管理技术规范
- 室内安装标识标牌施工方案
- GB/T 17775-2024旅游景区质量等级划分
- 小学数学情境教学设计案例分析
- 《福建省整体装配式卫浴间标准设计图集》
- 中药冷敷技术操作方法及常见疾病的中药冷敷技术
- 地方政府的组织结构课件
- 【公开课教案】《蹲踞式起跑》教案
- 病毒性脑炎临床路径(2016年版)
评论
0/150
提交评论