微机原理与接口技术实验指导上内容摘要:
三角形符号指示出了标号为 BEG 的那条指令是启动指令。 3. 动态调试 (1) 连续执行程序 按 F9 键 ( 即 Run | Run),即可从 BEG 开始连续执行程序。 (2) 查看执行结果 按 Alt+F5 键 (即 Window | User screen),临时切换到 DOS 屏幕,可查看程序的执行结果,即 5 行 HELLO。 注意: Alt 键要多按一会儿,直到快捷键提 示区更换提示内容之后再按 F5 键。 按任意键可以恢复 MODULE 窗口内容。 (3) 使光标重新指向启动指令 当程序运行结束 (三角形光标消失 ),按 Ctr1+F2(Run|Program rest)可以重新装入程序并使光标指向启动指令。 14 (4) 程序的单步执行 单步操作一次仅执行了一条指令,有 3 个单步操作命令,它们的区别仅在于 跟踪 的情况不同。 ① F8 (Run | Step over) 单步操作。 执行 CALL 和 INT n 指令的时候, 不跟踪 相关的子程序。 不眼踪 的含义是指在进入相关子程序后,自动地连续执行子程序指令直到返回。 所以,宏观上看不到跟踪的效果。 ② F7 (Run | Trace into) 单步操作。 执行 CALL 指令能够跟踪子程序,随即暂停,等待用户的下一步操作。 但是在遇到 INT n 指令时与 F8 一样,进 入 服务程序后立即自动地连续执行服务程序直到返回。 ③ Alt+F7 (Run | Instruction trace)单步操作。 真正意义上的单步操作,执行 CALL和 INT n 指令进入相关子程序之后立即停止,等待用户的下一步操作。 实践证明:用 Alt+F7 跟进服务程序以后,如果再执行单步操作,很容易使系统瘫痪。 因此,请读者慎用。 编者认为: Alt+F7 的用途在于跟进中断服务程序以后,可以了解服务程序的结构,如果服务程序是系统设计的 (如 INT 21H, INT 10H 等 ),应当用 F8 操作。 (5) 断点的设置和取消 按 ↑、 ↓键,使光标指向欲设置断点的指令,再按 F2 键 (Breakpoints | Toggle),则红色光条覆盖光标处的指令,表示断点设置成功,重复上述操作,可以设置多个断点。 将光标移到红色光条覆盖的指令,再次按下 F2 键,红色光条消失,表明此处断点撤销。 设置断点的目的是使程序执行到断点指令时暂停,以便检查执行结果。 (6) 检查单步 执行结果 指令执行后一定会使目标寄存器和状态标志发生变化,欲查看执行效果,怎么办 ? ① 在 CPU 窗口调试时 因为窗口中有寄存器、标志寄存器显示窗口,所以,当前指令执行后,可以从相关的显示窗口中看到结果。 ② 在 MODULE 窗口调试时 选中 View |Registers 可弹出寄存器和标志寄存器显示窗口,就可以查看执行结果。 (7) 检查内存数据区的内容 如果被调试程序要对数据段或附加段进行操作,怎样检查结果。 关键问题是要找出用户程序的数据段或附加段。 15 以例题 1 为例,说明这一操作的实现过程。 ① 如果调试是在 MODULE 窗口进行 首先选择 View | Dump ,弹出内存数据显示窗口,接着再按 Ctrl+S 弹出一个对话框,用户键 入 ‘FELLO‘—用单引号括起来的这一字符串是例 1 用户数据段中设置的内容, TD 根据用户的提示立即找出并显示用户程序数据区。 做好以上准备工作之后,按 F8 键单步执行指令,就可以看到用户数据段内容的变化。 例 1 中的语句 ① ~ ⑧ 就是为此项调试而设置的。 ② 如果调试是在 CPU 窗口进行 首先按 Tab 键,使内存数据显示区成为活动区,接下来的工作则与在 MODULE窗口的调试是相同的。 汇编语言程序设计是一项综合性的工作,需 要有一定的基础和经验。 如在出现问题时不进行分析和判断,过分依赖外来的调试工具,则对程序设计这一环节的帮助不大。 汇编语言调试软件的文件组织 读者应自备一张含有 Borland Trubo Assembler 的光盘,执行其中的INSTALL . EXE文件,根据操作提示将相关文件解压缩存人硬盘作备份。 再在 C盘上开辟一个 TASM子目录,从解压缩下来的文件备份中摘取 6 个文件外加一个全屏幕编辑文件,将这 7 个文件存 入 TASM 子目录中。 这样在 TASM 子目录下就构成了一个集编辑、编译、链接 和调试为一体的调试环境。 这 7 个文件是:编辑文件,TASM . EXE, TLINK . EXE, RTM . EXE, DPMI16BI . OVL, TD. EXE 和。 第 1章 汇编语言程序设计 汇编 程序的编辑与调试 【实验目的】 学习汇编源程序的编辑、编译、链接、执行全过程。 学习编辑文件、 TASM、 TLINK 的使用方法以及汇编语言的语法规则。 学习使用 TD 对程序进行调试的方法。 16 【实验 】 按 节 中的例题 编辑源程序;用 TASM、 TLINK 进行汇编、链接得到执行程序 ;用 TD 对执行程序调试,得到正确的结果。 【实验 】 下面的程序采用比较法,将一个 8 位二进制数转换成十进制数显示,其设计方法拙劣,语法错误很多,希望以它为蓝本,练习源程序的编辑、编译、链接和调试。 同学应照原样编辑源程序,汇编之后,必定给出若干错误信息,再根据错误提示,修改源程序,直到汇编后没有错误时为止,然后进行链接、执行。 正确的执行结果是在屏幕上显示: 100 + 9 = 109 [程序清单 ]:。 FILENAME: DATA SEGMENT N1 DW 0809H , AB N2 DB 100 SUN DB ? MESG DB ‗100+9=39。 DB 30H , 30H , 30H。 3 个 0 的 ASCII 码 DATA ENDS CODE SEGMENT ASSUME CS: CODE , DS: DATA BEG: MOV DS , DATA。 段基址 →DS MOV BX , OFFSET SUM MOV AH , N1。 9→AH MOV AL , N2。 100→AL ADD AH , AL MOV [BX] , AH。 和数 →SUM单元 CALL N2_10 MOV AH , 9 MOV DX , OFFSET MESG INT 21H MOV AH , 4CH INT 21H N2_10 PROC。 二进制数 →十进制数 ASCII 码 LAST: CMP [BX] , 100。 和数与 100 比较 JC NEXT1。 小于 100 转 SUB [BX] , 100。 否则 ,和数减 10O INC [BX+7]。 百位 数加 1JMP LAST JMP LAST NEXT1: CMP [BX] , 10。 余数与 10 比较 JC NEXT2。 小于 10 转 SUB [BX] , 10。 否则 ,余数减 10 17 INC [BX+8]。 十位数加 1 JMP NEXT1 NEXT2: ADD [BX+9] , SUM。 生成个位数 RET N2_10: ENDP CODE ENDS END BEG 顺序程序设计 【实验目的】 学习汇编语言基本操作指令 和伪指令的应用;了解编程的基本方法。 1. 示例 【 例 】变量 X, Y 为二位数字的 ASCII 码串,请编写程序计算并显示出下式的值: Z←X+(Y15) 解 :求一个代数式 (或表达式 )的值,一般的做法是根据运算符的优先级顺序进行计算,如上式先计算 (Y15),再与 X 相加,将其结果存放在 Z 变量中,最后可用 DOS功能调用将结果显示出来。 程序流程见图。 [程序清单 ]: TITLE ASCDAT(COM)。 add amp。 sub ASCII numbers CODESG SEGMENT ASSUME CS: CODESG, DS: CODESG ORG 100H BEGIN: JMP SHORT MAIN。 X DB 39。 6039。 ASCII number Y DB 39。 2439。 Z DB ‗000‘ , 39。 $‘ MAIN PROC NEAR MOV DX , CODESG。 initialize DS MOV DS , DX MOV AH , 0。 clear AH MOV AL , Y+1。 load Y‘s low order SUB AL , 05。 sub low order digit AAS。 adjust for sub MOV Z+2 , AL。 put result in Z‘s low order MOV AL , Y。 load y39。 s high order SBB AL , 01。 sub digit with carry Z←Z+X 结果转换为 ASCII 码 显示 结束 开始 图 例 的 程序框图 18 AAS。 adjust for sub XCHG AL , Z+2。 exchange lowerorder in AL ADD AL , X+1。 add lowerorder in AL AAA。 adjust for add XCHG AL , Z+2。 exchange high_order in AL ADC AL , X。 add high_order digit AAA。 adjust for add MOV Z+1 , AL。 store high_order result MOV Z , AH。 store carry OR Z , 30H。 string should be OR Z+1 , 30H。 ASCII string OR Z+2 , 30H MOV DX , OFFSET Z。 offset of string Z MOV AH , 9。 display string function INT 21H。 call DOS MOV AX , 4C00H。 return INT 21H MAIN ENDP。 CODEG ENDS END BEGIN 2. 实验题 【 实验 】编写程序,计算 (a + b) – 2 * (a AND b),结果送入 S 单元。 ( a,b 为字变量) 【 实验 】 设有两个带符号整数变量 A 和 B,求 A 和 B 之差并判断结果是否溢出。 【 实验 】 定义一个双字变量 VOLUME,从键盘输入长方体的长 (a),宽 (b)和高 (h),计算它的体积,并保存在 VOLUME 中(注意判断溢出)。 要求: ① 上述实验中的各变量单元要在数据区定义; ② 用 TD(或 debug)调试,运行并修改各变量的值,观察结果存放单元。 循环程序的设计 【 实验目的 】 学习并掌握循环程序的设计方法。 1. 示 例 【 例 】 表格查找 tabsrch 19 仓库管理中,总共存有有关库存品的编号、名称、数量、价格等情况的表格,根据用户提供的编号可以找到有关材料。 假设表格中共有 6 种库存品,表格的格式为: STOKTAB DB ‗0539。 , ‗Excavatos‘ DB ‗08‘ , ‗Lifters‘ ┇ 试编写一程序,根据用户提供的编号在终端上显示其名称。 根据题目的要求,程序可由三部分组成: ① 输入:接收用户键入的库存品号; ② 查表:根据给定编号在表格中查找所要求的库存品名称; ③ 输出:显示找到的库存品名称。 其中,第二部分是程序的主体,显然它可以使用循环结构。 由于在给定的表格中,编号及库存品名所占的字节数都是相等的,因此在查找时,只要根据编号的地址就可逐项查找。 循环的结束条件应该是在找到用户所指定的项时就可退出循环,但还必须考虑在表格中未查到所需编号的特殊情 况。 根据以上考虑可画出程序框图如图 所示。 如用户给出的编号可在表格中查到,则显示出相应的库存品名。 如用户不再需要查找,只需按一下‗‗回车 ‘键就可结束程序。 如表格中并无用户给出的编号,则显示 Not in table。 后结束程序。 [程序清单。微机原理与接口技术实验指导上
相关推荐
存入 5 位十进制数的 ASCll 码,即 E3500(回车) ,并输入 33 3 3 35; ③ G=2020(回车) ,运行以上程序; 15 ④ D350A,显示结果为: 0000: 350A 0l 02 03 04 05 CC ⑤ 反复试几组数,考查程序的正确性。 3.将十六位二进制数转换为 ASCII 码表示的十进制数 十进制 数的值域为 0~ 65535,最大可转换为 5 位十进制数。
4)在指令 MOV AX, VAL 中,源操作数 字段的寻址方式是直接寻址,其物理地址值 =( DS) *10H+50H =29000H+50H=29050H; ( 5)在指令 MOV AX, [BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值 =( DS) *10H +( BX) =29000H+100H=29100H; ( 6)在指令 MOV AX, ES: [BX] 中
时,意味着( C )操作。 A)读存储器 B)写存储器 C)读 I/O 端口 D)写 I/O 端口 Intel8284 的作用是( B ) A)地址锁存 B)产生时钟 C)总线控制 D)数据驱劢 . .. 16.以下存储器件,若存有数据,当掉电时,( B )存储器件 丌 能保留原有数据。 A)磁芯存储器 B) RAM C) ROM 8259 的作用是( B )。 A.定时 /计数 /摸转换 三
H] (4) MOV AX, VAL (5) MOV AX, [BX] (6) MOV AX, ES: [BX] (7) MOV AX, [BP] (8) MOV AX, [SI] (9) MOV AX, [BX+10] (10) MOV AX, VAL[BX] (11) MOV AX, [BX][SI] (12) MOV AX, VAL[BX][SI] 【解答】 (1) MOV AX, 21H
D ADD 指令对 6 个状态标志均产生影响。 带进位的加法 ADC ADC 指令在形式上和功能上与 ADD 类似,只是 相加时还要包括进位标志 CF 的内容 加 1 指令 INC 格式: INC reg/mem 功能:类似于 C 语言中的 ++操作:对指定的操作数加 1 注:本指令不影响 CF 标志。 减法指令 不考虑借位的减法指令 SUB 考虑借位的减法指令 SBB 减 1指令 DEC
;查表得: AL = 12H 输入输出指令( Input and Output) IN 指令: 从数据端口输入数据或从状态端口输入状态字。 OUT 指令:输出数据或命令给指定的 I/O 端口。 直接输入输出指令 格式: IN AL, PORT ; AL (PORT) IN AX, PORT ; AX (PORT+1, PORT) OUT PORT, AL ; (PORT)