




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 汇编语言程序设计实验二 汇编语言程序设计 一 实验目的一 实验目的 1 掌握 MASM 的操作步骤 能够将源程序编译成可执行文件 2 掌握简单的汇编语言程序的设计 建立及调试 二 实验任务与内容二 实验任务与内容 1 1 实验任务实验任务 1 编一程序 在显示器上显示 256 个 ASCII 代码 要求显示格式为每行显示 16 个字符 两个 ASCII 字符间空一格 2 试编一程序 把地址偏移量为 100H 单元开始的 256 个单元分别写入 00H 01 H 02H 03H FFH 数据 统计写入的数据块中 0 元素 正元素 负元素的个数 并 分别把 统计结果送人上述数据块之后的三个单元中 用 DOS 功能调用显示上面两题中数据 块各单元 包括统计结果 内容 为了显示清晰明了 要求每行显示 16 个数据 两个数据 之间用空格分开 3 编一程序 把键入的十六进制数转换成十进制数并在屏幕上显示出来 键入的最大数 为 FFFFH 若键人的不是十六进数字 则显示出错提示 2 2 实验内容实验内容 1 显示 256 个 ASCII 码 1 源程序 DATA SEGMENT 定义数据段 DB 256 DUP DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA 数据段赋值 MOV DS AX MOV CX 256 MOV DH 0 LOP TEST DH 00001111B 判断是否显示 16 个字符换行 JNZ NEXT MOV DL 13 换行 CALL DISP MOV DL 10 CALL DISP NEXT MOV DL DH 显示字符 CALL DISP MOV DL 两字符间加空格 CALL DISP INC DH 使用 DH 计数 LOOP LOP DONE 退出程序 MOV AH 4CH INT 21H DISP PROC NEAR 在屏幕上显示字符 PUSH AX MOV AH 2 INT 21H DOS 功能调用 POP AX RET Yes DISP ENDP CODE ENDS END START 2 程序流程图 DH 00H 开始 DH 0FH 显示字符 显示空格 DH DH 1 换行 Yes No 显示流程图 2 写入数据 统计元素个数 1 源程序 data segment org 100h 定义起始地址偏移量 buf db 259 dup 申请 259 个字 前 256 个用来存放 00 ff 的数据 后 面三个用来存放 0 正数 负数的个数 count equ buf data ends code segment assume cs code ds data start mov ax data mov ds ax mov si offset buf 让 si 指向 buf 的第一个数据 mov cx count 3 首先要存储 00 ff 共 256 个数据 需要循环 256 次 xor al al 清零 al next1 mov si al 将 al 数据存入 si 指向的地址的位置 inc al al 加 1 inc si si 加 1 loop next1 循环 256 次 即将 00 ff 存入 buf 的前 256 位 xor bx bx 清零 bx 其中 bl 用来存正数的个数 bh 用来存负 数的个数 xor dh dh 清零 dh dh 用来存 0 得个数 mov cx count 3 buf 中一个 256 个数据需要进行判断 因此 cx 256 次 mov si offset buf 将 si 指向 buf 的首地址 next2 mov al si 将 si 指向的地址数据赋给 al cmp al 0 把 al 和 0 比较 jz zero 如果 al 0 跳到 zero js negative 如果 sf 1 即负数 跳到 negative jmp positive 如果其他情况 跳到 positive zero inc dh 如果是 0 dh 加 1 jmp next3 跳到 next3 negative inc bh 如果是负数 bh 加 1 jmp next3 跳到 next3 positive inc bl 如果是正数 bl 加 1 next3 inc si next3 控制循环返回 si 加 1 loop next2 循环跳到 next2 直到 256 个数都判断好是 0 正 数或者负数 mov si dh 将 dh 存到 buf 的第 257 个数据 inc si si 加 1 mov si bx 将 bx 存到接下来的位置 存储的时候先存 bl 正 数 再存 bh 负数 mov si offset buf 将 si 指向 buf 的第一个数据 mov cx count cx 259 用来显示这 259 个数据 limrow mov bh 16 每行显示 16 个数据 next4 mov al si 将 si 指向的数据给 al mov bl al al 暂时存在 bl 里 shr al 1 将 al 向右移动 4 位 高位补 0 即只要高四位 shr al 1 shr al 1 shr al 1 cmp al 0ah 将 al 和 0a 比较 即看看高四位是数字还是字母 jc add30 如果需要借位 al 是数字 0 9 跳转到 add30 转 化成相应的 asc 码 add al 7 如果是字母 则先加 7 再加 30h add30 add al 30h 加 30h call display 调用子程序 display mov al bl 将原本暂存在 bl 的数据给 al and al 0fh 屏蔽高四位 保留第四位 cmp al 0ah 将 al 和 0a 比较 即看看低四位是数字还是字母 jc add30a 如果需要借位 al 是数字 0 9 跳转到 add30a 转化成相应的 asc 码 add al 7 如果是字母 则先加 7 再加 30h add30a add al 30h al 加 30h call display 调用子程序 display mov al 20h 输入完一个数后 空一格 call display inc si si 加 1 loop next5 循环跳转到 next5 直到 cx 0 程序结束 jmp stop next5 dec bh bh 减 1 jnz next4 如果 bh 不等于 0 跳到 next4 mov al 0dh 如果 bh 0 回车 换行 call display mov al 0ah call display jmp limrow 跳转到 limrow display proc near 子程序 display mov dl al 将 al 赋值给 dl mov ah 02h int21h 显示相应的 asc 码 int 21h ret 返回 call 的下一条指令 display endp stop mov ah 4ch 程序运行结束 int 21h code ends end start 2 程序流程图 开始 输入字符串存入缓存 将附加偏移地址存入 AL SI 自动增 1 0 元素计数器 M2 加 1 逐个检查字符 AL 与 0 比较 正数元素计数器 M3 加 1 负数元素计数器 M4 加 1 CZ 0 CX CX 1 结束 输出 显示结 果 0 0 Yes No 统计流程图 3 十六进制数转换成十进制数 1 源程序 CODE SEGMENT 定义代码段 MAIN PROC FAR 定义段间调用子程序 ASSUME CS CODE 段寄存器关联说明 CALL HEXIN 调用子程序 键盘输入十六进制数并将其转换成二进制数 CALL CRLF CALL BINIDEC CALL CRLF 调用子程序 输出一个回车 换行 JMP MAIN RET MAIN ENDP HEXIN PROC NEAR MOV AX 0 NEWCHAR MOV AH 01H INT 21H SUB AL 30H al 30h al JL EXIT al 0 转去保存转换结果 结束子程序 返回调用者 CMP AL 10D al 10 JL ADD TO 是则转去转换对应的二进制数 SUB AL 27H al 27h al CMP AL 0AH al 10h 此时 相当于比较输入的字符是否大于或等于 g JGE EXIT 是则转去保存转换结果 结束子程序 返回调用者 ADD TO MOV CL 4 SHL BX CL bx 左移 4 位 MOV AH 0 ADD BX AX JMP NEWCHAR 接受下一个十六进制字符 EXIT RET HEXIN ENDP BINIDEC PROC NEAR MOV CX 10000D CALL DEC DIV 把 bx 的内容转换成对应的十进制 ASCII 码字符并显示 MOV CX 1000D CALL DEC DIV MOV CX 100D CALL DEC DIV MOV CX 10D CALL DEC DIV MOV CX 1D CALL DEC DIV RET DEC DIV PROC NEAR 把 bx 的内容转换成对应的十进制 ASCII 码字符并显示 MOV AX BX MOV DX 0 dx 置 0 准备做除法 除数是 16 位 DIV CX MOV BX DX dx bx 余数赋给 bx 保存 MOV DL AL al dl 商数赋给 dl 准备显示对应的十进制数字符 ADD DL 30H dl 30h dl 转换成对应的 ASCII 码字符 MOV AH 02H INT 21H RET DEC DIV ENDP BINIDEC ENDP 子程序 输出一个回车 换行 CRLF PROC NEAR MOV DL 0AH 回车符 dl MOV AH 02H dos 功能调用 2 号功能 显示一个字符 dl 中 INT 21H MOV DL 0DH MOV AH 02H INT 21H RET CRLF ENDP CODE ENDS END MAIN 2 程序流程图 判断输入 十六进制数 开始 结束 调入键盘输入 调用 HEXIN 子程序 将输出 0 调用 BINIDEC 子程序 进行转换 输出 Yes No 三 实验结果三 实验结果 1 显示 256 个 ASCII 码 2 写入数据 统计元素个数 3 十六进制数转换成十进制数 四 实验总结四 实验总结 心得体会 通过本次的实验 我对汇编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政供热老旧管网改造工程节能评估报告
- 煤炭仓储物流项目节能评估报告
- 机械拆除与人工拆除配合方案
- 2025年关于轴承考试试题及答案
- 氢能电源生产线项目技术方案
- 起重设备安装项目成本控制方案
- 足疗理论考试题目及答案
- 住宅小区物业股权转让及业主权益保障协议
- 离婚协议经典样本:婚姻终止财产分配与子女监护协议
- 液化空气储能空分技术经济性分析与评估
- DB4406∕T 47-2024 养老机构安全风险管理规范
- 城乡垃圾压缩站建设施工组织设计方案
- 安徽省合肥市六校联考2025-2026年高三上学期开学考试语文试卷(含答案)
- 2025债权收购委托代理合同
- 框架合作协议书合同模板
- 2025年辅警招聘考试试题库(附答案)(满分必刷)
- 热处理安全培训考试试题及答案解析
- 2025年北京市中考英语真题卷含答案解析
- 制鞋工岗前考核试卷及答案
- (2025年标准)课时合同转让协议书
- 郑州市突发应急预案
评论
0/150
提交评论