燕山大学汇编语言实验答案
汇编语言 实验3 串操作 (含答案)
实验一串操作一、实验预习要求1、复习8086指令系统中的串操作指令。
2、复习汇编程序的建立、连接、执行和调试的全过程。
3、根据本实验的编程提示及题目要求编写试验中的程序段。
二、编程提示1、定义逻辑段时,所定义的数据段或附加段的缓冲区大小及缓冲区起始地址应与实际的操作需要一致。
;例如定义如下附加段:<附加段名> SEGMENT ;定义附加段ORG 1000H ;定义缓冲区从该逻辑地址为1000H处开始BUFFER DB 10H DUP(?) ;定义缓冲区大小为10H个字节单元<附加段名> ENDS2、任何程序都需要定于代码段。
在代码段中需要初始化所定义的除代码段寄存器之外其他段寄存器,程序代码的最后需要有正常返回DOS的指令。
如下:<代码段名> SEGMENTASSUME CS :<代码段名> ,DS:<数据段名>,ES:<附加段名>START: MOV AX , <数据段名>MOV DS, AXMOV AX, <附加段名>MOV ES,AX【串操作程序代码】MOV AH,4CHINT 21H<代码段名> ENDS三、实验内容1、在代码段中输入以下程序段并运行之,回答问题。
CLDMOV DI,1000HMOV AX,55AAHMOV CX,10HREP STOSW上述程序生成EXE文件,执行后:(1)从ES:1000H开始的16个字单元的内容是什么?(1)DI=?,CX=?解释原因。
DI=1020H CX=0000H REP的功能是重复执行操作至CX=0,而STOSW是每次执行指令都是(DI)←(DI)+2DI=2020 CX=0000 REP的功能是重复执行操作至cx=0,而stosw是每次执行指令都是(DI)<-(DI)+22、在上题的基础上,在代码段中再输入以下程序段并运行,回答下面的问题:MOV SI,1000HMOV DI,2000HMOV CX,20HREP MOVSB程序执行后:(1)从ES:2000H开始的16个字单元的内容是什么?(2)SI=?,DI=?,CX=?分析原因。
20XX年燕山大学汇编语言实验答案
20XX年燕山大学汇编语言实验答案实验一汇编语言源程序的输入一、实验目的1.通过实验了解和熟悉微机系统的配置。
2.学习在DEBUG状态下输入汇编源程序的方法。
3.初步掌握调试(在DEBUG状态下)的过程。
二、实验原理1. 本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。
用单步跟踪的方法验证指令的功能。
2. 以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。
注:⑴微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”;⑵在DEBUG状态下执行程序时,“INT 20H”指令可使系统执行完该指令前的程序时返回到“-”提示符状态,并且恢复CS和IP寄存器原来的值。
三、实验仪器微机一台。
四、实验步骤1. 开机后进入DOS系统。
C > DEBUG↙ (↙回车符) - (为DEBUG 提示符)当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。
2. 用DEBUG的Register命令检查所有寄存器内容,并作记录。
命令格式: R [寄存器名]该命令的功能是显示寄存器的内容,或修改某一指定寄存器内容,若[寄存器名]缺省,则显示所有寄存器内容。
例如:-R3. 用DEBUG的Assemble命令输入汇编源程序。
格式:A [内存地址]注:用“[ ]”符号括起来的部分表示可以省略。
该命令的功能是从指定的内存地址开始逐条输入汇编语言源程序并汇编成机器码存入内存。
若地址缺省,则接上一个A命令最后一条指令之后输入汇编语句,若没有用过A 命令,则从CS:0100H地址开始输入。
例如:-A 0CD3:0100-在输入A命令之后,或每输入一条指令之后,显示器的左端给出了内存的段地址和偏移地址。
每条指令均用回车(↙)结束。
若输入的指令有语法错误,DEBUG拒绝接收,并给出提示,此时可以重新输入。
汇编语言程序设计教案及习题答案
汇编语言程序设计教案及习题答案教案章节:一、汇编语言简介1. 汇编语言的概念2. 汇编语言的特点3. 汇编语言的应用领域二、汇编语言的基本语法1. 数据类型及表示2. 指令格式及分类3. 寄存器使用规则三、汇编语言程序设计步骤1. 分析需求,确定程序功能2. 选择合适的汇编语言及开发环境3. 编写汇编代码,调试程序4. 优化程序性能四、常用汇编指令及功能1. 数据传输指令2. 算术运算指令3. 逻辑运算指令4. 控制流指令5. 字符串操作指令6. 中断指令五、汇编语言与C语言的接口编程1. extern声明汇编函数2. 调用汇编函数的方法3. 汇编函数与C函数的数据交换4. 实例分析:汇编语言实现字符串排序习题答案:一、汇编语言简介1. 汇编语言是一种低级编程语言,用于编写计算机程序。
(正确)2. 汇编语言可以直接操作计算机硬件资源。
(正确)3. 汇编语言程序可读性差,不易维护。
(正确)二、汇编语言的基本语法1. 数据类型及表示a. 字节:8位(正确)b. 字:16位(正确)c. 双字:32位(正确)d. 四字:64位(正确)2. 指令格式及分类a. 操作码(正确)b. 操作数(正确)c. 寄存器(正确)d. 标志位(正确)3. 寄存器使用规则a. 通用寄存器:AX, BX, CX, DX(正确)b. 段寄存器:CS, DS, ES, SS(正确)c. 指令指针:IP(正确)d. 状态寄存器:FLAGS(正确)三、汇编语言程序设计步骤1. 分析需求,确定程序功能(正确)2. 选择合适的汇编语言及开发环境(正确)3. 编写汇编代码,调试程序(正确)4. 优化程序性能(正确)四、常用汇编指令及功能1. 数据传输指令a. MOV:数据传送(正确)b. PUSH:压栈(正确)c. POP:出栈(正确)d. XCHG:交换数据(正确)2. 算术运算指令a. ADD:加法(正确)b. SUB:减法(正确)c. MUL:无符号乘法(正确)d. IMUL:有符号乘法(正确)3. 逻辑运算指令a. AND:逻辑与(正确)b. OR:逻辑或(正确)c. XOR:逻辑异或(正确)d. NOT:逻辑非(正确)4. 控制流指令a. JMP:无条件跳转(正确)b. JE:相等跳转(正确)c. JNE:不相等跳转(正确)5. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)6. 中断指令a. INT:软件中断(正确)b. INTO:中断向量表(正确)五、汇编语言与C语言的接口编程1. extern声明汇编函数(正确)2. 调用汇编函数的方法(正确)3. 汇编函数与C函数的数据交换(正确)4. 实例分析:汇编语言实现字符串排序(正确)汇编语言程序设计教案及习题答案教案章节:六、汇编语言的输入与输出1. 输入输出指令2. 字符串操作指令3. 实例分析:编写一个简单的输入输出程序七、汇编语言的杂项指令1. 杂项指令的概念2. 常用杂项指令及其功能3. 实例分析:杂项指令的应用八、汇编语言的子程序调用1. 子程序调用的概念2. 子程序的定义与调用3. 子程序的返回4. 实例分析:子程序在汇编语言中的应用九、汇编语言的程序举例1. 实例一:计算两个数的和2. 实例二:字符串的复制3. 实例三:数制的转换4. 实例四:文件的读写十、汇编语言程序的调试与优化1. 调试工具的使用2. 调试方法与技巧3. 程序优化的概念4. 程序优化的方法与技巧习题答案:六、汇编语言的输入与输出1. 输入输出指令a. IN:输入指令(正确)b. OUT:输出指令(正确)c. INPUT:输入函数(正确)d. PRINT:输出函数(正确)2. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)3. 实例分析:编写一个简单的输入输出程序(正确)七、汇编语言的杂项指令1. 杂项指令的概念(正确)2. 常用杂项指令及其功能a. NOP:无操作(正确)b. HLT:停止CPU运行(正确)c. CMC:翻转标志位(正确)d. ARPL:寄存器之间交换(正确)3. 实例分析:杂项指令的应用(正确)八、汇编语言的子程序调用1. 子程序调用的概念(正确)2. 子程序的定义与调用a. 定义子程序(正确)b. 调用子程序(正确)3. 子程序的返回(正确)4. 实例分析:子程序在汇编语言中的应用(正确)九、汇编语言的程序举例1. 实例一:计算两个数的和(正确)2. 实例二:字符串的复制(正确)3. 实例三:数制的转换(正确)4. 实例四:文件的读写(正确)十、汇编语言程序的调试与优化1. 调试工具的使用(正确)2. 调试方法与技巧(正确)3. 程序优化的概念(正确)4. 程序优化的方法与技巧(正确)汇编语言程序设计教案及习题答案教案章节:十一、汇编语言与操作系统1. 操作系统的概念2. 汇编语言在操作系统中的应用3. 实例分析:汇编语言编写简单的操作系统十二、汇编语言与设备驱动程序1. 设备驱动程序的概念2. 汇编语言在设备驱动程序开发中的应用3. 实例分析:汇编语言编写简单的设备驱动程序十三、汇编语言与嵌入式系统1. 嵌入式系统的概念2. 汇编语言在嵌入式系统中的应用3. 实例分析:汇编语言编写简单的嵌入式系统十四、汇编语言与汇编器的使用1. 汇编器的概念2. 汇编器的使用方法3. 实例分析:使用汇编器编写和调试汇编程序十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势2. 汇编语言在未来的应用领域3. 汇编语言学习的方法与建议习题答案:十一、汇编语言与操作系统1. 操作系统的概念(正确)2. 汇编语言在操作系统中的应用(正确)3. 实例分析:汇编语言编写简单的操作系统(正确)十二、汇编语言与设备驱动程序1. 设备驱动程序的概念(正确)2. 汇编语言在设备驱动程序开发中的应用(正确)3. 实例分析:汇编语言编写简单的设备驱动程序(正确)十三、汇编语言与嵌入式系统1. 嵌入式系统的概念(正确)2. 汇编语言在嵌入式系统中的应用(正确)3. 实例分析:汇编语言编写简单的嵌入式系统(正确)十四、汇编语言与汇编器的使用1. 汇编器的概念(正确)2. 汇编器的使用方法(正确)3. 实例分析:使用汇编器编写和调试汇编程序(正确)十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势(正确)2. 汇编语言在未来的应用领域(正确)3. 汇编语言学习的方法与建议(正确)重点和难点解析本文主要介绍了汇编语言程序设计的基础知识和应用领域,通过详细的章节安排,从汇编语言的基本概念、语法规则、程序设计步骤、常用指令及其功能、输入输出操作、杂项指令、子程序调用、程序举例、调试与优化等方面进行了深入讲解。
汇编语言第3版答案
汇编语言第3版答案【篇一:汇编语言习题答案 (3)】一、选择题(四选一)1.表示一条处理器指令所在存储单元的符号地址是a 变量b 常量c 标号d 偏移量2.汇编语言中的变量有多种类型属性,但错误的类型是a 字节型byteb 字符型charc 字型wordd 双字型dword3.执行mov bx,seg var指令,bx得到变量var的。
a 物理地址b 段地址c 偏移地址d 内容4.masm语句中,采用a 逗号b 分号c 冒号d 空格5.欲设定从偏移地址100h开始安排程序,可使用a org 100hb start=100hc start db 100hd start equ 100h6.与“mov bx,offset var”指令等效的指令是a mov bx,varb 1ds bx,varc les bx,vard 1ea bx,var.7.下条语句buf db l0 dup(3 dup(?,10),3,10)汇编后,变量buf占有的存储单元字节数是 b 。
a 100b 80c 40d 208.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的num1单元的内容是。
a 0b 0ffffhc 1d 0ffh9.要求将a、b两个字符的ascii码41h和42h顺序存放在连续两个字节存储单元中,可选用的语句是 a 。
a db`ab'b dw `ab'c db 0abhd dw 0abh10.在汇编语言程序中,对end语句叙述正确的是a end语句是一可执行语句b end语句表示程序执行到此结束c end语句表示源程序到此结束d end语句在汇编后要产生机器码11.下面的数据传送指令中,错误的操作是a mov ss:[bx+di],byte ptr 10hb mov dx,l000hc mov word ptr[bx],1000hd mov ds,2000h12.下面指令执行后,变量dab中的内容是daw dw 2a05hdab db 0fah?mov al,byte ptr dawsub dab,ala 0dahb 0fahc 0f5hd 0d0h13.根据下面的语句序列,ax寄存器的内容是。
汇编语言程序设计部分练习参考答案
汇编语言程序设计练习参考答案(第三章 80x86的指令系统与寻址方式) 1.(1)立即寻址-(2)直接寻址7237H(3)使用BX的寄存器寻址-(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5B4H(6)基址变址寻址8E18H(7)相对基址变址004FH2.(1) ADD DX,BX(2) ADD AL,[BX][SI](3) ADD [BX+0B2H], CX (4) ADD WORD PTR [0524H] ,2A59H(5) ADD AL ,0B5H3.(1)MOV BX,OFFSET BLOCK+0AH MOV DX ,[BX](2) MOV SI,OAHMOV DX,BLOCK[SI] 或MOV DX,SI+BLOCK(3)MOV BX ,OFFSET BLOCK 或LEA BX,BLOCKMOV SI,OAHMOV DX,[BX][SI]4.(1) MOV AX,1200H 1200H => AX = 1200H(2) MOV AX,BX BX = 0100H => AX = 0100H(3) MOV AX,[1200H] ((ds)*10h+1200h) = (21200h) = 4C2AH => AX = 4C2AH(4) MOV AX,[BX] ((ds)*10h+ (bx)) = (20199H) = 3412H => AX = 3412H(5) MOV 1100H[BX] ((ds)*10h+(bx)+1100h) = (21200H) = 4C2AH => AX = 4C2AH(6) MOV AX,[BX][SI] ((ds)*10h+(si)+(bx)) = (20102H) = 7856H => AX = 7856H(7) MOV AX,1100H[BX][SI] ((ds)*10h+(si)+(bx)+1100h) = (21202hH) = 65B7H => AX = 65B7H注:原题(5)和题(7)中的1100后面漏了十六进制说明符“H”5.(1)当前指令的IP为2BC0H,段内直接转移指令占3个字节,因此下一条指令的地址(IP)值应该为2BC2H,于是转移的偏移地址为: 2BC2H+5119H = 7CDCH(2) 按题意,该指令为JMP WORD PTR [BX]((DS)*10H+(BX)) = (212A*10H+1200H) = (224A0H) = 0600H, 所以转移的偏移地址为0600H(3)按题意,该指令为JMP WORD PTR D[BX]((DS)*10H+(BX)+D) = (212A*10H+1200H+5119H) = (275B9H) = 098AH, 所以转移的偏移地址为098AH6. LDS BX ,[2000H]MOV AX,[BX]图示如图3.1注:为了只改变AX,不影响其它寄存器,本题可以做如下完善处理:PUSH DSPUSH BXLDS BX,[2000H]MOV AX,[BX]POP BXPOP DS图3.17. JMP SHORT OBJ指令占两个字节,存放在偏移地址为0624H的连续两单元中,因此这条指令执行完后下一条指令的偏移地址(即IP值)为0626H,因此转向地址OBJ的值分别为:(1)0626H + 0027H = 064DH(2) 0626H + 006BH = 0691H(3) 0626H + 0FFC6 = 05ECH8. 指令源操作数的寻址方式物理地址(1)MOV AX,0ABH 立即数寻址-(2)MOV AX,BX 寄存器寻址-(3) MOV AX,[100H] 存储器直接寻址(ds)*10H+0100H = 20100H (4)MOV AX,V AL 存储器直接寻址(ds)*10H+0050H = 20050H (5)MOV AX,[BX] 寄存器间接寻址(ds)*10H+(bx)= 20100H (6) MOV AX,ES:[BX] 存储器直接寻址(es)*10H+(bx)= 21100H (7)MOV AX,[BP] 寄存器间接寻址(ss)*10H+(bp)= 15010H (8)MOV AX,[SI] 寄存器间接寻址(ds)*10H+(si)= 200A0H (9) MOV AX,[BX+10] 寄存器相对寻址(ds)*10H+(bx)+10 = 2010AH (10)MOV AX,V AL[BX] 寄存器相对寻址(ds)*10H+(bx)+0050H = 20150H (11) MOV AX,[BX][SI] 基址变址寻址(ds)*10H+(bx)+(si)= 201A0H (12) MOV AX,V AL[BX][SI] 相对基相变址寻址(ds)*10H+(bx)+(si)+0050H = 201F0H 9.(1)MOV AX, [BX+0CH] MOV ZREO ,AX (2) MOV AX,ARRAY[BX] MOV ZREO,AX10.MOV AX,TABLE 把符号地址TABLE所给出的字存储单元中的内容送给AX,指令执行完后,(AX)=1234HLEA AX,TABLE 把符号地址TABLE 的有效地址(这里是TABLE的偏移量)送给指定寄存器AX,指令执行完后,(AX)=0032H11.分配的存储单元如图3.2所示。
汇编语言程序设计实验指导及习题解答-第五章
DW 1,2,3,4,5,6,7,8,9,10 DW($-ARY1)/2 DW ? DW 10,20,30,40,50,60,70,80 DW($-ARY2)/2 DW ? DW 100,200,300,400,500,600 DW($-ARY3)/2 DW ?
;构造数组 1 的地址表
97
;通过寄存器传递地址表的首地址
;通过寄存器传递地址表的首地址 ;求和数组 2 并保存结果 ;构造数组 3 的地址表
MOV TABLE+2,OFFSET COUNT3 MOV TABLE+4,OFFSET SUM3 LEA BX,TABLE CALL ARY-SUM MOV AX, 4C00H INT 21H ARY-SUM PROC NEAR PUSH AX PUSH PUSH PUSH MOV MOV MOV MOV XOR ADD ADD CX SI DI SI,[BX] DI,[BX+2] CX,[DI] DI,[BX+4] AX,AX AX,[SI] SI,2
TRAN
;分离出个位数 ;分离出十位数
MOV ROR MOV MUL ADD
CL,04H AL,CL BH,0AH BH AL,BL
;将十位数移至低 4 位 ;十位数乘以 10 ;乘积与个位数相加
TRAN
POP CX POP BX POPF RET ENDP END START
2.通过地址表传递参数地址 有时直接传递参数本身不能方便地实现所要求功能,需要通过地址表传递参数地址的 方法实现参数传递。具体方法是先建立一个地址表,该表由参数地址构成。然后把表的首 地址通过寄存器或堆栈传递给子程序。 【例 5.4】 计算 ARY1、ARY2、ARY3 三个数组和,并把各自的和分别放入 SUM1、 SUM2、SUM3 单元,其数组元素及结果均为字型数据。 显然数组求和应该用子程序完成,这样做使得代码真正共享。但在子程序中不能直接 引用数组变量名,否则不能做到通用,在这种情况下可以通过传递参数地址的方法实现最 终的参数传递。本例用数组首地址、元素个数的地址、结果地址构成一个地址表,通过寄 存器把表的首地址传递给子程序,子程序通过地址表的参数地址访问到所需参数。
汇编语言作业及参考答案
汇编语言作业答案1.3什么是汇编语言源程序、汇编程序、目标程序?见教材P41.10数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0Dh、0aH对应的是什么字符?见教材P81.11计算机中有一个“‘编码,如果把它认为是无符号数,它是十进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?97,61h,a1.13什么是DOS和POM-BIOS?DOS:磁盘操作系统;POM-BIOS:可编程的基本输入输出系统2.3 举例说明CF和OF标志的差异。
见教材P20-212.5 什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达:(1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h见教材P22-23 FFFF0h 417h 24500h BC777h2.6 8086有哪4种逻辑段,各种逻辑段分别是什么用途?见教材P232.10 说明下列指令中源操作数的寻址方式?如果BX=2000H,DI=40H,给出DX的值或有效地址EA的值。
(1)mov dx,[1234h] 直接寻址(2) mov dx,1234h 立即寻址(3) mov dx,bx 寄存器寻址(4) mov dx,[bx] 寄存器间接寻址(5) mov dx,[bx+123h] 寄存器相对寻址(6) mov dx,[dx+di] 基址变址寻址(7) mov dx,[bx+di+1234h] 相对基址变址寻址2.11 已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行后AX寄存器的内容。
(1)mov ax,1200h 1200h(2) mov ax,bx 0100h(3) mov ax,[1200h] 2a4ch(4) mov ax,[bx] 1234h(5) mov ax,[bx+1100h] 2a4ch(6) mov ax,[bx+si] 5678h(7) mov ax,[bx][si+1100h] b765h2.15 已知SS=FFAOH、SP=00B0H,画图说明执行下列指令序列时,堆栈区和SP的内容如何变化?mov ax,8057hpush ax SP=00B2 [00B1]=80hmov ax,0f79hpush ax SP=00B2 [00B2]=0f79hpop bx BX=0f79h SP=00B1pop [bx] SP=00B0h2.16给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al ,89h 不影响标志add al, al 见教材P38add al, 9dh 见教材P38cmp al, 0bch 见教材P40sub al, al 见教材P39dec al 见教材P39inc al 见教材P382.17设均为双字数据,分别存放在地址为的存储单元中,他们的运算结果存入单元。
汇编语言参考答案.pdf
汇编参考答案注:题目旁的数字为课本页码1.处理器的性能指标。
1处理器的性能用字长、时钟频率、集成度等基本的技术参数来衡量。
字长:表明处理器每个时间单位可以处理的二进制数据位数,如一次运算、传输的位数。
时钟频率表明处理器的处理速度,反映了处理器的基本时间单位。
集成度表明处理器的生产工艺水平,通常用芯片上集成的晶体管数量来表达。
2.冯诺依曼的基本思想。
10(1)采用二进制形式表示数据和指令,指令有操作码和地址码组成(2)将程序和数据存放在存储器中,计算机在工作时从存储器取出指令加以执行,自动完成计算任务。
(3)指令的执行时顺序的,即一般按照指令在存储器中的存放的顺序执行,程序分支由转移指令实现。
(4)计算机有存储器运算器,控制器。
输入设备和输出设备五大基本部件组成,并规定了5部分的基本功能。
3.有三种系统总线是哪些13或154地址总线、数据总线、控制总线4.计算机系统的层次结构17184(1)第0层数字电路层(2)第1层控制层(3)第2层机器语言层(4)第3层操作系统层(5)第4层汇编语言层(6)第5层高级语言层(7)第6层用户层5.软件与硬件的等价性原理19软件与硬件的等价性原理是指软硬件在逻辑功能上的等价,并不意味着性能和成本的等价。
6.区别如下概念:助记符,汇编语言,汇编语言程序和汇编程序助记符:帮助记忆指令的符号,反应指令的功能。
处理器指令助记符可以是任何一条处理器指令,表示一种处理器操作。
44汇编语言:为了便于理解与记忆,将机器指令用助记符代替形成的一种语言18汇编语言程序:用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。
汇编程序:汇编语言程序翻译成机器语言的过程称为汇编,完成汇编工作的程序就是汇编程序(Assembler)。
187.移位指令SHL SAL SHR SAR ROL ROR RCR93SHL(Shift Left):逻辑左移SHR(Shift Right):逻辑右移SAL(Shift Arithmetic Left):算术左移SAR:算术右移ROL(Rotate Left):循环左移ROR(Rotate Right):循环右移RCR(Rotate through Carry Right):带进位循环右移8.什么是存储器芯片的全译码和部分译码?各有什么特点194全译码:使用全部系统地址总线进行译码。
汇编语言程序设计实验二及答案
实验二:汇编语程序设计一、实验目的旨在通过实验使同学了解汇编语言的程序结构和编程方法,可以编写出顺序程序、分支程序和一般的循环程序,并学会修改和调试方法。
二、实验环境MASM、LINK、DEBUG或包含此软件的相关软件三、实验内容1.1、从FIRST开始的100个单元中存放着一个字符串,结束符为$。
编写一个程序,统计该字符串中字母‘A’的个数。
DATA SEGMENTFIRST DB 'AGHI K…$’ ;定义字符串,结束符为$NUMBER DB ? ;结果存放单元DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX,DATA ;建立数据段的可寻址性MOV DS, AXMOV BL,0 ;BL用作统计计数器LEA DI,FIRST ;取字符串首址NEXT: MOV AL, [ DI] ;取一个字符INC DI ;指向下一个字符CMP AL,’$’ ;与结束符’$’比较JE EXIT ;等于,搜索完结束CMP AL , 'A ;与字符‘A’比较JNE NEXT ;不等于。
不统计INC BL ;找到,计数IMP NEXT ;继续EXIT: MOV NUMBER,BLMOV AH,4CHINT 21HCODE ENDSEND START2.编程判断输入的ASCII码字符时数字还是字母,并将判断结果分别以“D”和“L”显示出来。
解:用宏实现字符显示。
程序如下:DISPLAY MACRD CHAR;显示字符宏定义MOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS: CODESTART : MOV AH, 0lH ;输人一个ASCI I码字符INT 21 HCMP AL, '0’JC ERROR ;非数字和字母,转ERROR处理CMP AL, '9'JA NEXT ;非数字,转NERTDISPLAY 'D' ;数字。
《汇编语言》各章习题答案
汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。
汇编语言程序设计习题及答案
汇编语言程序设计习题及答案汇编语言程序设计习题及答案汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。
虽然在现代计算机编程中,高级语言如C、Java等更为常见,但了解汇编语言的基本原理和编程技巧对于理解计算机底层工作原理和进行性能优化非常重要。
本文将介绍一些汇编语言程序设计的习题及其答案,帮助读者巩固和提升汇编语言编程能力。
一、基础习题1. 编写一个汇编程序,将存储器中的某个字节的值加1,并将结果存回原位置。
答案:```assemblyMOV AL, [地址]INC ALMOV [地址], AL```2. 编写一个汇编程序,计算存储器中一个数组的和,并将结果存放在指定的寄存器中。
答案:```assemblyMOV CX, 数组长度MOV BX, 数组首地址MOV AX, 0LOOP_START:ADD AX, [BX]ADD BX, 2LOOP LOOP_START```二、进阶习题1. 编写一个汇编程序,实现字符串的逆序输出。
答案:```assemblyMOV SI, 字符串首地址MOV DI, 字符串尾地址MOV CX, 字符串长度DEC CXREVERSE:MOV AL, [SI]MOV AH, [DI]MOV [DI], ALMOV [SI], AHINC SIDEC DILOOP REVERSE```2. 编写一个汇编程序,实现两个16位无符号整数的相乘,并将结果存放在指定的寄存器中。
答案:```assemblyMOV AX, 第一个数MOV BX, 第二个数MUL BX```三、挑战习题1. 编写一个汇编程序,实现一个简单的计算器,支持加法、减法、乘法和除法运算。
答案:```assemblyREAD_INPUT:; 读取用户输入; ...PARSE_INPUT:; 解析用户输入,获取操作数和运算符; ...CALCULATE:; 根据运算符进行相应的计算; ...DISPLAY_RESULT:; 将计算结果显示给用户; ...LOOP:; 循环执行计算器程序; ...```2. 编写一个汇编程序,实现一个简单的迷宫游戏,玩家通过键盘控制角色在迷宫中移动,并找到出口。
汇编语言程序设计课后习题答案习题2详解
习题2写出从汇编语言源程序的建立到产生可执行文件的步骤和上机操作命令。
步骤:1.编辑形成文件(MY为文件名)2.汇编形成文件3.连接形成MYEXE文件上机操作:1.进入dos命令行方式2.在汇编语言的系统工作文件目录下,键入:Edit 按回车键编辑3.MASM MY 按回车键汇编4.LINK MY按回车键连接5.MY 按回车键运行6.DEBUG 按回车键进行调试。
列表文件.LST实在什么阶段产生的列表文件有哪些内容列表文件是在汇编的时候产生的执行 MASM 程序名程序名程序名按回车键就会在汇编的同时产生列表文件。
列表文件里有源程序和机器语言清单,指令和变量的偏移地址等等。
写出定义一个代码段的语句,段名为MYPRG。
MYPRG SEGMENTASSUME CS:MYPRGStart:Code endsEnd start源程序中用什么语句来结束程序的执行用什么语句来表示程序的结束和指出程序执行的起点。
MOV ah,4chINT 21h 结束程序的执行并返回到操作系统。
Code ends 程序结束End start 指出程序执行的起点汇编语言源程序的文件扩展名是什么把他改为.exe扩展名以后,可以认为是可执行程序么答:源文件的扩展名为.ASM。
改为.exe后不可能是可执行程序,源文件只有经历汇编行成机器指令,然后连接才能形成可执行程序列出子目录C:\YOUPRG下的扩张名为.ASM的所有文件,在D盘根目录下建立一个子目录,并进子目录MYPRG,再把C:YOUPRG下的文件YOU .ASM复制到D :\MYPRG下。
写出完成以上要求的DOS 命令。
答:C:\YOUPRG>DIY *.ASMC:\YOUPRG>D:D:\MD MYPRGD:\CD MYPRGD:\MYPRG>COPY C:\YOUPRG> D:\MYPRG2.7下图为DEBUG调入的可执行程序,回答以下问题:(1)程序的起始物理地址是多少结束地址是多少(2)CS寄存器的值是什么(3)程序的功能是什么(4)写出查看DS:0处内容的DEBUG命令。
汇编语言程序设计》教案及答案第
《汇编语言程序设计》教案及答案第一章一、教学目标1. 了解汇编语言的背景和基本概念。
2. 掌握汇编语言的语法和常用指令。
3. 学会编写简单的汇编语言程序。
二、教学内容1. 汇编语言的概述1.1 汇编语言的背景1.2 汇编语言的特点1.3 汇编语言的发展历程2. 汇编语言的基本概念2.1 汇编语言的组成2.2 汇编语言与机器语言的关系2.3 汇编语言的指令格式3. 汇编语言的语法3.1 数据类型和寄存器3.2 指令的分类和格式3.3 汇编语言的伪指令4. 常用汇编指令4.1 数据传输指令4.2 算术运算指令4.3 逻辑运算指令4.4 控制流指令4.5 字符串操作指令5. 编写简单的汇编语言程序5.1 程序的格式和结构5.2 程序的编写和调试三、教学方法1. 讲授法:讲解汇编语言的基本概念、语法和指令。
2. 示例法:通过示例程序讲解汇编语言的编程方法和技巧。
3. 实践法:让学生动手编写汇编语言程序,巩固所学知识。
四、教学环境1. 教室:配备多媒体教学设备,便于展示PPT和示例程序。
2. 计算机:学生每人一台计算机,安装有汇编语言编程环境。
五、教学评价1. 课堂提问:检查学生对汇编语言基本概念的理解。
2. 课后作业:检查学生对汇编语言指令的掌握程度。
3. 编程实践:评估学生编写汇编语言程序的能力。
《汇编语言程序设计》教案及答案第二章一、教学目标1. 掌握汇编语言的汇编过程。
2. 学会使用汇编语言进行内存管理和堆栈操作。
3. 了解汇编语言与C语言的接口编程。
二、教学内容1. 汇编语言的汇编过程1.1 汇编程序的作用1.2 汇编程序的格式1.3 汇编过程中的符号表和地址表2. 内存管理和堆栈操作2.1 内存空间的分配与释放2.2 堆栈的概念和操作2.3 堆栈指针的调整3. 汇编语言与C语言的接口编程3.1 外部函数的声明和调用3.2 数据传递的方式3.3 接口编程的注意事项三、教学方法1. 讲授法:讲解汇编语言的汇编过程、内存管理和堆栈操作。
系统认识及汇编语言的使用实验一及答案
实验一:系统认识及汇编语言的使用一、实验目的通过此实验使学生了解汇编语言的编程环境,学习使用debug调试汇编语言,理解汇编语言的数据段、代码段、偏移地址及寻址方式等的含义。
二、实验环境MASM、LINK、DEBUG或包含此软件的相关软件三、实验内容在文本编辑器里输入以下程序:(文件名为exam . asm)Data segment;数据段开始Str1 db ‘Hello everyone!$’;定义一个字符串,以$结尾Data ends ;数据段结束code segment ;代码段开始assume cs:code,ds:datastart:MOV AX,DATAMOV DS,AX;数据段寄存器赋值MOV DX,OFFSET STR1;取字符串变量的偏移地址MOV AH,9INT 21H ;DOS功能调用,显示字符串MOV DL,0DH;MOV AH,2INT 21H ;DOS功能调用,显示回车MOV DL,0AHMOV AH,2INT 21H ;DOS功能调用,显示换行MOV AH,4CHINT 21Hcode ends ;代码段结束end start四、实验过程1.进入到目的文件夹1)将文件夹“MASM6”拷贝到D:盘根目录下2)将exam . asm拷贝到MASM6文件夹下3)进入模拟DOS环境4)输入CD.. CD为DOS里进入文件夹的命令5)输入CD..6)输入D: 进入到D盘7)输CD MASM6进入到MASM6文件夹2.汇编语言文件操作1)输入masm exam.asm(masm为宏汇编程序,该句的意思是对exam.asm进行宏汇编)用MASM对源程序进行宏汇编,生成.OBJ文件;如果有error或者没有生成.OBJ文件,返回到文本编辑器里修改源文件(.ASM)。
直到正确为止。
2)输入LINK EXAM.OBJ,(用LINK对目标文件进行连接)在需要输入的地方敲回车。
你会看到MASM6文件夹下有EXAM.EXE生成。
汇编语言课后习题答案
汇编语⾔课后习题答案2.1已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4C B765H,说明下列每条指令执⾏完后AX寄存器的内容。
(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH;偏移地址=bx=0100h(4)AX=3412H;偏移地址=bx=0100h(5)AX=4C2AH;偏移地址=bx+1100h=1200h(6)AX=7856H;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov[sp],ax(7)mov ax,bx+di(8)mov20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁⽌⽤户访问(3)⽴即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)⽬的操作数应为[SI](7)源操作数应为[BX+DI](8)⽴即数不能作⽬的操作数〔习题2.5〕已知SS=2200H、SP=00B0H,画图说明执⾏下⾯指令序列时,堆栈区和SP的内容如何变化?mov ax,8057h push axmov ax,0f79hpush axpop bxpop[bx]〔解答〕mov ax,8057hpush axmov ax,0f79hpush axpop bx;bx=0f79hpop[bx];DS:[0f79h]=8057h〔习题2.6〕给出下列各条指令执⾏后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al〔解答〕mov al,89h;AL=89h CF ZF SF OF PFadd al,al;AL=12h10011;10001001+10001001100010010add al,9dh;AL=0afh00101;00010010+1001110110101111cmp al,0bch;AL=0afh10101;10101111-10111100*01000011sub al,al;AL=00h01001dec al;AL=0ffh00101 ;00000000-00000001*11111111inc al;AL=00h01001 ;11111111+00000001*11111111必考:〔习题2.10〕指出下列指令的错误:(1)xchg[si],30h (2)pop cs(3)sub[si],[di](4)push ah(5)adc ax,ds(6)add[si],80h(7)in al,3fch(8)out dx,ah〔解答〕(1)xchg的操作数不能是⽴即数(2)不应对CS直接赋值(3)两个操作数不能都是存储单元(4)堆栈的操作数不能是字节量(5)adc的操作数不能是段寄存器(6)没有确定是字节还是字操作(7)in不⽀持超过FFH的直接寻址(8)out只能以AL/AX为源操作数〔习题2.11〕给出下列各条指令执⾏后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。
汇编语言实验指导手册(附个人编译答案)
汇编语言程序设计实验指导手册班级:_______________学号:_______________姓名:杨天啸电子与信息工程学院计算机科学系写在最前面的话这个文档在网上到处都是,这也体现了我们工大人大公无私的精神~\(≧▽≦)/~ 但是!答案是没有滴~~~因此老杨我作为一个伪学霸,特地整理了一下我自己编的程序,有些加以极其详细备注,这要特地感谢我的→_→战友←_← 啊,没有她的鸡蛋里挑骨头的询问,我也不会打得如此详细,我发表这个文档的目的不是让大家大肆抄袭,而是仅仅为大家提供一个汇编上的编程思路,当然我的程序肯定有不足之处啦,毕竟是伪学霸╮(╯▽╰)╭,所以大家一定要小心哦,不要踩雷,祝大家学习进步,心想事成,成为学霸,走上人生巅峰,抱得美人归*^_^*第一部分上机实验的目的和要求一、课程性质、目的与任务“汇编语言程序设计实验”课程是计算机科学与技术及其他相关专业学生的一门核心必修课程。
通过本课程的学习与实验,可以加深学生对汇编语言的理解,进一步掌握CPU、存储器及外设的性能和他们的基本使用方法,提高学生运用所学知识,独立分析问题与解决问题的能力。
二、教学基本要求本课为设计性实验课,学生试验前应按实验内容要求编制程序,学生在实验期间输入和调试程序,观察程序运行结果,课后写出试验报告。
指导教师在实验前概述实验程序算法,在实验期间做针对性的指导、检查实验结果,实验后批改实验报告。
三、上机实验前的准备工作在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:(1)了解所用的计算机系统的性能和使用方法;(2)复习和掌握与本实验有关的教学内容;(3)准备好上机所需的程序。
由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。
应当在上机前按指定的题目编写好程序。
手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。
初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;(5)准备好调试和运行时所需的数据。
汇编语言课后习题解答
汇编语言课后习题解答汇编语言作为一种低级编程语言,被广泛应用于计算机系统的底层开发与优化。
在学习汇编语言的过程中,习题解答是一个非常重要的环节,它有助于我们深入理解汇编语言的原理和应用。
本文将针对汇编语言课后习题进行解答和分析。
第一题:需求:写一个汇编程序,从键盘输入两个数,求其和并输出。
解答:```assembly.datanum1 dw ?num2 dw ?sum dw ?.codemain procmov ax, @datamov ds, axmov ah, 1int 21h ;读取第一个数sub al, '0' ;将ASCII码转换为二进制数 mov num1, almov ah, 1int 21h ;读取第二个数sub al, '0' ;将ASCII码转换为二进制数 mov num2, aladd al, num1mov sum, aladd sum, '0' ;将结果转换为ASCII码mov ah, 2mov dl, sumint 21h ;输出结果mov ax, 4C00hint 21h ;程序结束main endpend main```第二题:需求:编写一个汇编程序,判断一个数是否是素数,并输出结果。
解答:```assembly.datanum dw ?.codemain procmov ax, @datamov ds, axmov ah, 1int 21h ;读取一个数sub al, '0' ;将ASCII码转换为二进制数mov num, almov bx, 2 ;用bx寄存器从2开始除mov cx, 0 ;用cx统计除数的个数loop_start:mov dx, 0mov ax, numdiv bx ;用ax除以bx,余数存在dxcmp dx, 0je loop_end ;如果余数为0,则跳出循环inc bx ;除数加1inc cx ;除数个数加1cmp bx, axjg loop_end ;如果除数大于被除数,跳出循环 jmp loop_start ;循环继续loop_end:cmp cx, 0je prime ;如果除数个数为0,则是素数jne not_prime ;否则不是素数prime:mov ah, 2mov dl, 'Y' ;输出判断结果为是素数int 21hjmp exitnot_prime:mov ah, 2mov dl, 'N' ;输出判断结果为不是素数int 21hexit:mov ax, 4C00hint 21hmain endpend main```通过以上两个题目的解答,我们可以看出汇编语言的编写方法和具体步骤。
汇编语言实验答案(有截图)
实验标题实验03_显示字符串、解除除法溢出问题、数值显示实验日期2011年12月20日实验人姓名实验人班级计09一实验作业1:显示字符串程序实验作业1的流程图:实验作业1的程序:assume cs:codedata segmentdb 'Welcome to masm!',0data endscode segmentstart:mov cl,2mov ax,datamov ds,axmov si,0call show_strover:mov ax,4c00hint 21hshow_str:mov di,8*160+3*2 ;指向指定的行列mov ax,0b800hmov es,ax ;显存地址s:mov ah,BYTE ptr [si]cmp ah,0 ;计算ah-0je over ;等于则转移到overmov BYTE ptr es:[di],ah ;写入字符inc dimov BYTE ptr es:[di],cl ;写入字符属性inc diinc sijmp short s ;转到标号处执行指令code endsend start实验作业1的截图:实验作业2:解除除法溢出问题实验作业2的流程图:实验作业2的程序:assume cs:codestack segmentdw 8 dup (0)stack endsdata segmentdw 8 dup (0)data endscode segmentstart: mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov ax,4240hmov dx,000fhmov cx,0ah ;给被除数和除数赋值call divdwmov ax,4c00hint 21hdivdw:push bx ;避免寄存器冲突将调用前的数据压栈mov bx,0 ;将参数保存至ds:0之后的空间mov [bx],ax ;参数ax=[bx]mov [bx+2],dx ;参数dx=[bx+2]mov ax,[bx+2] ;H的低16位ax=[bx+2]mov dx,0 ;H的高16位dx为0div cx ;N=cx,运算H/Npush ax ;int(H/N)=ax,[rem(H/N)*65536+L]/N要使用ax,因此压栈;rem(H/N)=dx,正好是[rem(H/N)*65536+L]/N运算的高16位,因此省去压栈mov ax,[bx] ;L即低16位=[bx],高16位即rem(H/N),也就是现在的dxdiv cx ;运算[rem(H/N)*65536+L]/Nmov cx,dx ;第二次除法的余数dx即为返回值余数cx,ax即为返回值商的低16位ax(因此不动)pop dx ;第一次除法的商即为返回值商的高16位dx,因此出栈pop bxretcode endsend start实验作业2的截图:实验作业3:数值显示实验作业3的程序:assume cs:code,ds:data,ss:stackdata segmentdb 10 dup(0)data endsstack segmentdw 128 dup(0)stack endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,12660mov bx,datamov ds,bxmov si,0call dtocmov dh,8mov dl,3mov cl,2call show_strmov ax,4c00hint 21hdtoc:push axpush bxpush cxpush sipush dimov di,simov bx,10mov cx,0s:push cxmov cx,axjcxz enddtocpop cxmov dx,0div bxmov ds:[di],dladd byte ptr ds:[di],30h inc diinc cxjmp short s enddtoc:pop cxmov ds:[di],0dec dimov ax,cxmov bl,2div blmov cl,als1:mov al,ds:[di]mov bl,ds:[si]mov ds:[di],blmov ds:[si],alinc sidec diloop s1pop dipop sipop cxpop bxpop axretshow_str:push dxpush sipush dipush cxpush axmov ax,0b800hmov es,axmov ax,160mul dhmov dh,0add ax,dxadd ax,dxsub ax,2mov di,axmov ah,cloutput:mov ch,ds:[si]mov cl,0jcxz okmov byte ptr es:[di],chmov byte ptr es:[di+1],ah inc siinc diinc dijmp short outputok:pop axpop cxpop dipop sipop dxretcode endsend start实验作业3的截图:。
c语言实验指导书答案《汇编语言》实验指导书
c语言实验指导书答案《汇编语言》实验指导书导读:就爱阅读网友为您分享以下“《汇编语言》实验指导书”的资讯,希望对您有所帮助,感谢您对的支持!实验十中断程序设计一、知识点1、中断向量表及其使用中断向量表:中断类型码与中断处理程序之间的连接表占据的主存空间:00000h ~ 003ffh 共1kB能够存放最多256个中断服务子程序的入口地址,每个地址占4个字节,高地址的2个字节存放中断处理程序的段首址,低地址存放段内偏移地址2、中断服务程序的格式i_name proc……sti ;开中断… … ;中断服务程序段ireti_name endp3、用户自己编写的中断服务程序的调用一般按以下步骤:(1)选择一个中断向量号,读取该中断向量号对应的中断向量并保存(压栈或存入内存)(2)在中断向量表中设置新的中断服务子程序的中断向量(即入口地址)(3)调用新的中断服务子程序(4)中断调用结束后,要恢复原来的中断向量(驻留中断程序例外)具体实现方法:(1)读取中断向量并保存,利用dos功能调用int 21h中的35h号功能。
入口参数:al=中断向量号出口参数:es:bx=中断服务程序的入口地址例如:选择并保存45h中断向量:mov ah,35h ;取中断向量的功能调用mov al,45h ;设置中断向量号45hint 21h ;取得段地址和偏移地址放入ex:bx mov keep_ip, bx ;保存偏移地址mov keep_cx, ex ;保存段地址(2)在中断向量表中设置新的中断服务子程序的中断向量,利用int 21h中的25h功能。
入口参数:al=中断向量号、ds:dx=中断服务程序的入口地址比如:将45h号中断设置为自编的中断服务程序new45h的中断向量:push dsmov dx,offset new45hmov ax, seg new45hmov ds,axmov al, 25hint 21hpop ds(3)中断调用:INT 45H(4) 中断调用结束后,要恢复原来的中断向量push dsmov dx,keep_ip ;取出偏移地址mov ax,keep_cs ;取出段地址mov ds,ax ;段地址送dsmov al, 45h ;中断向量号mov ah,25h ;设置中断向量的功能调用号int 21hpop ds4、采用中断方式进行输入输出的优点:实现外设与主机并行工作二、实验目的及要求1、了解中断概念和工作原理2、掌握内部中断和外部中断,中断程序设计方法,设置和获取中断向量的方法3、掌握中断处理过程,中断向量表的安排三、实验内容1、将以下功能编写成中断服务子程序:将AX中的无符号二进制数(16位)以4位十六进制的形式输出到显示器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三分支程序设计
一、实验目的
练习分支程序的编写方法。
练习汇编语言程序的上机过程。
二、实验原理
通过分支程序设计调试和运行,进一步熟悉掌握汇编程序执行的软件环境。
通过分支程序的执行过程,熟悉EDIT的使用,建立OBJ文件EXE文件的方法。
三、实验仪器
微机一台。
实验一汇编语言源程序的输入
一、实验目的
1.通过实验了解和熟悉微机系统的配置。
2.学习在DEBUG状态下输入汇编源程序的方法。
3.初步掌握调试(在DEBUG状态下)的过程。
二、实验原理
1.本实验要求在DEBUG状态下输入汇编源程序,并用DEBUG命令进行调试。用单步跟踪的方法验证指令的功能。
2.以下是给定的参考程序,并在实验时在每条指令的“;”符号右边按要求填写指令的执行结果。
ADC SP,DI; SP=9081HF=
ADC AX,1500; AX=05E0HF=00000001
SUB AX,BX; AX=F6C0HBX=0F20H
SHL AH,1; AH=ECH
RCL AX,1; AX=D981H
SHR BH,1; BH=07H
RCR BL,1;BL=90H
MOV CL,4
MOV DI,SI; DI=2030H
MOV [DI+50], BH; [DI+50H]=20H
MOV BH, [SI]; BH=0FH
MOV BL, [DI+50]; BL=20H
MOV SP,5000
PUSH AX; AX=0000H[SS:4FFEH]=00H[SS:4FFFH]=00H
PUSH BX ; BX=0F20H[SS:4FFCH]=20H[SS:4FFDH]=0FH
mov s6,0
mov s7,0
mov s8,0
mov s9,0
mov s10,0
movcx,10; initialize loop count value
movbx, offset grade; initialize first addr
compare:
movax, [bx] ; get a result
-R
3.用DEBUG的Assemble命令输入汇编源程序。格式:
A[内存地址]
注:用“[ ]”符号括起来的部分表示可以省略。
该命令的功能是从指定的内存地址开始(括号不要输入)逐条输入汇编语言源程序并汇编成机器码存入内存。若地址缺省,则接上一个A命令最后一条指令之后输入汇编语句,若没有用过A命令,则从CS:0100H地址开始输入。例如:
s5dw 0
s6dw 0
s7dw 0
s8dw 0
s9dw 0
s10dw 0
datareaends
;************************************
prognam segment;define code segment
;----------------------------
main proc far; main part of program
NOT AX; AX=DFFFH
XOR AX,AX; AX=0000H
DEC AX; AX=FFFFH
INC AX; AX=0000H
MOV BX,2030; BH=20H
MOV SI,BX; SI=2030H
MOV [SI],BL; [2030H]=30H
MOV WORD PTR[SI],10F ; [2030H]=0FH[2031H]=01H
这一题目的算法很简单,成绩分等部分采用分支结构,统计所有成绩则用循环结构完成。程序框图如下图所示。
三、实验仪器
1.微机一台。
开始
初始化计数单元
初始化循环计数值
初始化首地址
取一个成绩
Y<60?
N
Y<70?
N
Y<80?
N
Y<90?
N
N=100?
Y
修改地址
N
循环结束?
Y
结束
程序框图
四、实验步骤
输入编写的源程序,进行调试。
MOV CX,1FH;数据块长度是31
PPEA:MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP PPEA
INT 20H
检查内存数据块的传送情况,可用“D”命令。
(b)用串传送指令MOVSB,把数据块传送到15150H开始的区域,该程序从内存CS:0200H开始输入。
检查程序最后的执行结果,可用“D”命令,例如:
C >DEBUG↙(↙回车符)
-(为DEBUG提示符)
当显示器出现提示符“-”时,说明已进入DEBUG状态,这时,可用DEBUG命令进行操作。
2.用DEBUG的Register命令检查所有寄存器内容,并作记录。命令格式:
R[寄存器名]
该命令的功能是显示寄存器的内容,或修改某一指定寄存器内容,若[寄存器名]缺省,则显示所有寄存器内容。例如:
MOV AX,1000H
MOV DS,AX
MOV SI,0
MOV CL,0FH
XOR AX,AX
PPE1:MOV [SI],AL
INC SI
INC AL
DEC CL
JNZ PPE1
MOV CX,10H
PPE2:MOV [SI],AL
INC SI
DEC AL
LOOP PPE2
INT 20H
注:转移指令的符号地址直接用绝对偏移地址,该地址在用A命令汇编输入时,可以看到程序全部运行完之后,可用DEBUG的Dump命令查看建立的数据块内容。例如:
-D1000:001E
2.把上一个程序的执行结果(建立的31个字节数据块,其首地址在10000H),分几种方式传送到以下指定的区域。
(a)该程序从内存CS:0150H开始输入。把数据块传送到15050H开始的存贮区域中。
参考程序:MOV AX,1000H
MOV DS,AX
MOV SI,0
MOV DI,5050H
-D1000:5150↙
(c)用重复串操作指令“REP MOVSB”把数据块传送到15250H开始的区域。该程序从CS:250H地址开始输入。
检查程序的最后执行结果时,可用:
-D1000: 5250H
(d)用串操作的减量工作方式,把数据块传送到25050H开始的区域。该程序从CS:0300H开始输入。
标志名
标志为1
标志为0
OF溢出(是/否)
OV
NV
DF方向(减量/增量)
DN
UP
IF中断(允许/关闭)
EI
DI
SF符号(负/正)
NG
PL
ZF零(是/否)
ZR
NZ
AF辅助进位(是/否)
AC
NA
PF奇偶(偶/奇)
PE
PO
CF进位(是/否)
CY
NC
实验二数据的建立与传送程序
一、实验目的
1.继续学习DEBUG命令。
检查程序的最后执行结果,用D命令:
-D2000:5050↙
三、实验仪器
微机一台。
四、实验步骤
参照实验一的步骤,按照本实验程序的内容,分别输入各段程序,连续执行程序,记录每个程序段的最后结果。若想把源数据块重新换一批数据,可以用DEBUG的Fill命令填充新的数据。例如:
-F1000:00 L1F 33↙
; set DS register to current data segment
mov ax,datarea; datarea segment addr
mov ds,ax; into DS register
; MAIN PART OF PROGRAM GOES HERE
mov s5,0; initialize counter
参考程序如下:
;PROGRAM TITLE GOES HERE――result
;************************************
datarea segment;define data segment
grade dw 56,69,84,82,73,88,99,63,100,80
四、实验内容
给出三个有符号数,编写一个比较相等关系的程序:
(1)如果这三个数都不相等,则显示0;
(2)
(3)如果这三个数中有两个数相等,则显示1;
(4)
(5)如果这三个数都相等,则显示2;
(6)
DEBUG:
EDIT:
执行结果为:0
五、实验报告要求
1.该源程序在DEBUG和EDIT两种状态下运行。
2.实验报告中要有源程序和执行结果。
6.用DEBUG的Dump命令显示存贮器单元的内容。命令格式:
D[起始地址[终止地址]]
该命令的功能是从起始地址到终止地址,连续显示存贮器单元的内容。若地址缺省,则接上一个D命令或从DS:0100H地址开始显示。例如:
-D↙
参考程序:
MOV AX,2000; AL=00H
MOV DS, AX;DS=2000H
T[ =起始地址] [指令条数]
该命令的功能是从指定的起始地址开始逐条执行指令,每执行完一条指令,屏幕显示所有寄存器内容和下一条指令地址和指令。若[=起始地址]缺省,则T命令从CS:IP地址开始执行指令。
例如:
-T↙
重复这一过程,即可看到每条指令执行后,所有寄存器和标志寄存器的标志位内容。此时,要检查内存单元的数据,可用DEBUG的D命令。
cmpax, 60; <60?