




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、重 庆 大 学学 生 实 验 报 告实验课程名称 汇编语言程序设计 开课实验室 DS1501 学 院 软件学院 年级 大二 专业班 软件工程03班 学 生 姓 名 王鑫 学 号 20141722 开 课 时 间 2015 至 2016 学年第 1 学期总 成 绩教师签名王志平软件工程学院 制汇编语言程序设计实验报告 开课实验室: DS1501机房 2015 年 12 月15 日学院软件学院年级、专业、班14级软件工程班 姓名王鑫成绩课程名称汇编语言程序设计实验项目名 称实验六:熟练掌握子程序结构和中断指导教师王志平教师评语教师签名:王志平2015年 月 日一【实验目的】掌握汇编语言语言及提高D
2、EBUG 的调试程序的能力。二【实验环境】PC微机DOS操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境(如果是64位机器需要安装DOSBOX将64位win虚拟为32位的环境,安装好DOSBOX后启动,用mount 虚拟的空间 win中真实的空间,例如 mount f: f:masm 就将本机磁盘上的f:masm虚拟成f:,这时进入f:就相当于进入了f:masm ,且此时是虚拟成32位的环境)三【预备知识】一、 数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX
3、先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG 比较并交换操作数.( 第二个操作数必须为累
4、加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里 )XLAT 字节查表转换. BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( BX+AL->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, 端口号DX )OUT I/O端口输出. ( 语法: OUT 端口号DX,累加器 )输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,strin
5、g ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送
6、指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),
7、或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或 商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志
8、位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志 用来
9、控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ
10、 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1>无条件转移指令 (长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果
11、(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1
12、时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.EN
13、DP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束. 备注:进行单个字符输出 mov ah,2mov dl,61 (61的ascii 是a)int 21进行单个字符输入(值会以ascii 保存到 al 中)Mov ah,01Int 21字符串输出string db helloMov ah,9Mov dx,offset stringInt 21字符串输入 存入到 DS:DX的内存区Mov ah=0A可以用debug 的 p = 地址 进行测试-p能够 接收 中断信息四【实验步骤】(完成后 需要将 补入代码和程序截图具体命令可以参考该文档上面
14、部分的介绍和第三章书上的内容)一. 写出指令将一个字节数据输出到端口25H。二.写出指令将一个字数据从端口1000H输入。三.如设备D1,D2,D3,D4,D5是按优先级次序排列的,设备D1的优先级最高。而中断请求的次序如下所示,试给出各设备的中断处理程序的运行次序。假设所有的中断处理程序开始后就有STI指令。(1) 设备D3和D4同时发出中断请求。(2) 在设备D3的中断处理程序完成之前,设备D2发出中断请求。(3) 在设备D4的中断处理程序未发出中断结束命令(EOI)之前,设备D5发出中断请求。(4) 以上所有中断处理程序完成并返回主程序,设备D1,D3,D5同时发出中断请求。四.编写一个
15、程序,接受从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为:输入数字:0,1,2,3,4,5,6,7,8,9密码数字:7,5,9,1,3,6,8,0,2,4五编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来。主程序TELIST:A. 显示提示符“INPUT NAME:”;B. 调用子程序INPUT_NAME输入姓名;C. 显示提示符“INPUT A TELEPHONE NUMBER:”;D. 调用子程序INPHONE输入电话号码;E. 调用子程序PRINTLINE显
16、示姓名及电话号码。子程序INPUT_NAME:A. 调用键盘输入子程序GETCHAR,把输入的姓名存放在INBUF缓冲区中;B. 把INBUF中的姓名移入输出行OUTNAME。子程序INPHONE:A. 调用键盘输入子程序GETCHAR,把输入的8位电话号码存放在INBUF缓冲区中;B. 把INBUF中的号码移入输出行OUTPHONE。子程序PRINTLINE:显示姓名及电话号码,格式为:NAMETEL.X X XXXXXXXXX五【实验过程原始记录(数据、图表、计算等)】一、 指令为:out 25H,al 二、 指令为:mov dx,1000H in ax,dx三、设备的中断处理程序的次序为
17、:INT_D3,INT_D2嵌套INT_D3,INT_D4,INT_D5;INT_D1,INT_D3,INT_D5 四、五、六【实验结果及分析】一、OUT 是输出指令,25H是端口地址,将al的内容输入到端口25H处二、In是读入命令,将地址1000H处的内容读到ax中三、微处理器在处理低级别中断的过程中,如果出现了级别高的中断请求,微处理器停止执行低级中断的处理程序而去优先处理高级中断,等高级中断处理完毕后,再接着执行低级的未处理完的程序,这种中断处理方式成为中断嵌套。(1)设备3和4同时发出中断请求; 中断处理次序为:D3D4(2)设备3和4同时发出中断请求,并在设备3的中断处理
18、程序完成之前,设备2发出中断请求; 中断处理次序为: D3D2D3D4(3)在设备D4的中断处理程序未发出中断结束命令(EOI)之前,设备D5发出中断请求。 接下来执行D5(4)以上所有中断处理程序完成并返回主程序,设备D1,D3,D5同时发出中断请求 最后执行D1,D3,D5四、XLAT指令功能:把以DS:BX+AL为地址的待查表格的一个字节内容送到AL累加器中。在执行该指令前,将数据表偏移址送BX中,将待查字节在数据表的偏移指针送AL。data segmentsecret db 7,5,9,1,3,6,8,0,2,4buffer db 10 DUP(?)data end
19、scode segmentassume ds:data,cs:codestart:mov ax,data ;将数据段地址存入dsmov ds,axmov si,0mov cx,11lea bx,secret ;将偏移地址存入bxinput:mov ah,01H ;输入值int 21Hcmp al,0aH ;与返回键进行比较jz exitand al,0FHxlat ;查表,使得AL(BX)+(AL)mov buffersi,al ;将其内容存入缓冲区inc siloop inputexit:mov cx,10mov si,0SCC:mov dl,buffersi ;输出缓冲区的内容add dl
20、,30Hmov ah,02Hint 21Hinc siloop SCCmov ah,4cHint 21Hcode endsend start五、本程序主要通过在主程序里调用输入姓名、电话号码和输出的子程序来实现。主要指令有call ,ret ,rep等指令data segmentinbuf db 12 dup(' ') ;输入缓冲区,初始值为空outname db 16 dup(' ') ;姓名输出,初始值为空outphone db 12 dup(' '),0DH,0AH,'$'号码输出行,初始值为空message1 db
21、9;INPUT NAME:' ,'$'message2 db 'INPUT A TELEPHONE NUMBER:' , '$'message3 db 'NAME',12 dup(' '), 'TEL.', 0DH,0AH, '$'crlf db 0DH,0AH,'$'data ends ;数据段 ;-stack segmentdw 100 dup (?)tos label wordstack ends ;定义堆栈段;-code segmenttelist p
22、roc far ;主程序assume cs:code,ds:data,es:data,ss:stackstart:mov ax,stackmov ss,ax ;为ss赋值mov sp,offset tos ;为sp赋值push dssub ax,axpush axmov ax,datamov ds,axmov es,axbegin:lea dx,message1mov ah,09H ;显示字符串int 21Hcall input_name ;输入姓名lea dx,message2mov ah,09H ;显示字符串int 21Hcall inphone ;输入电话号码call printline ;显示姓名及电话号码rettelist endp;-input_name proc near ;输入姓名子程序call getchar ;调入输入字符子程序输入姓名lea si,inbuf ;把inbuf中的姓名移入输出行outnamelea di,outnamemov cx,12cld ;使DF的值为0rep movsb ;重复执行retinput_name endp ;子程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瑶海区注册公司合同范本
- 消防安全协议书合同范本
- 股东借款合同协议书范本
- 锅炉安装工程协议合同书
- 物流仓储安全管理协议书
- 税务代理项目协议书范本
- 灵活用工协议与劳动合同
- 江西北斗卫星导航协议书
- 股票期权服务协议合同书
- 脱落墙体粉刷维修协议书
- 2025年客房服务员(高级)客房服务员职业技能培训题库
- 医院防暴伤医培训
- 2025年战略合作协议和框架协议
- 办公楼电气系统改造方案
- 征地拆迁工作整改措施
- GB/T 45089-20240~3岁婴幼儿居家照护服务规范
- 《车路协同 路侧感知系统 第2部分:测试方法》
- 办公楼物业保安管理服务方案
- 游戏开发与运营合同
- 2024儿童身高现状报告
- 重庆市园林水生植物栽植技术标准
评论
0/150
提交评论