编辑: star薰衣草 | 2019-07-05 |
02 FD
04 FB
06 F9 08-F7 0C E2 0A F4
06 06
00 ... 发现 ****:000e 单元的内容不是 7, 而是 6, 说明程序有错. -t (t 为跟踪命令, 可选择逐条跟踪或多条跟踪.跟踪过程中, 显示每条指令执行后寄存器内容、标志位状态、下一条指令的地址和内容等信息. 这里是从 cs:ip 开始逐条跟踪运行, 以便查找错误) AX=0000 BX=0000 CX=0033 DX=0000 SP=0062 BP=0000 SI=0000DI=0000 DS=**** ES=**** SS=**** CS=**** IP=0001 NV UP EI PL NZ NA PO NC ****:0001 B80000 MOV AX,0000 -t ... ****:0004
50 PUSH AX -t ... ****:0005 B82A14 MOV AX, -t ... ****:0008 8ED8 MOV DS,AX -t ... ****:000A BB0000 MOV BX,0000 -t ... ****:000D B90E00 MOV CX,000E -t ... ****:0010 BA0000 MOV DX,0000 -t AX=**** BX=0000 CX=000E X=0000 SP=0060 P=0000 SI=0000 DI=0000 DS=**** ES=**** SS=**** CS=**** IP=0013 NV UP EI PL NZ NA PO NC ****:0013 8B07 MOV AX,[BX]DS:0000=02FF 单步执行到此处,发现错误, 第一个数应该是单字节负数 ffh, 但被处理为双字节正数 02ffh. 应该将 mov ax,[bx] 以及 cmp ax,0 这两条指令中的 ax 改为 al.根据前面反汇编的结果可知, 这两条指令所在的内存单元为****:0013~****:0017. -a ****:0013 (用a命令改写这两条语句) ****:0013 mov al,[bx] ****:0015 cmp al,0 ****:0017 nop (改写到 ****:0017 单元) ****:0018 -g=****:0 (改写程序后, 再次运行程序) Program terminated normally -d ****:0 (显示运行结果) ****:0000 FF
02 FD
04 FB
06 F9 08-F7 0C E2 0A F4
06 07
00 ... ****:000e 单元的内容为 7, 结果正确. -q (退出 debug) 实验三 顺序结构程序设计 实验目的: 掌握顺序结构的程序设计方法. 实验内容: 内存中自 table 开始的七个单元连续存放着自然数
0 至6的立方值 (称立方表).任给一数 x (0≤x≤6)在xx 单元, 查表求 x 立方值, 把 结果存入 yy 单元. 根据上述题目的要求, 设计一个顺序结构的程序.程序汇编、连接通过后, 用debug 对执行文件进行检测, 给xx 单元赋不同的值, 运行程序, 看yy 单元的值是否正确. 程序流程: 数据段: 自table 开始的七个单元连续存放自然数
0 至6的立方值;
定义变量 xx, 并赋
0 至6之间的值;
定义变量 yy. 堆栈段:定义
50 个字节的堆栈空间 代码段:保留返回地址;
ds 初始化 bx ← offset table ah ← 0;
al← xx bx ← bx+ax al ← [bx];
yy ← al 返回 dos 实验四 分支结构程序设计 实验目的: 掌握分支结构的程序设计方法和有关指令的使用方法. 实验内容:1 (当x>
0) 符号函数定义为 y=
0 (当x=0) -1 (当x0, 则转向 kk;
返回 dos. 实验六 子程序设计 实验目的: 掌握子程序的设计及其调用. 实验内容: 编写一个含有子程序调用的程序, 求函数 y = a2 + b2 + ab a、b 是两个单字节无符号数, 并在数据段中定义, 结果存在y (占用三个字节).子程序的任务是求两数乘积及累加和. 程序汇编、连接通过后, 用debug 进行调试, 改变 a、b 的值,将y开始的三单元置 0, 运行程序, 看y的值是否正确. 程序流程: 数据段: 定义单字节数 a 和b, 赋任意值;
定义单字节数 y, 预留三个单元 堆栈段: 定义
100 个单元的堆栈空间 建议使用下列指令: mul add 代码段: 保留返回地址;
ds 初始化 传递参数 a 调用子程序, 求a平方 传递参数 b 调用子程序, 求b平方及累加和 传递参数 a、b 调用子程序, 求a*b 及累加和 返回 dos 实验七 DOS、ROM BIOS 系统调用一(随机数产生器) 实验目的: 掌握基本 I/O、程序流程: 格式化输出、键盘检测、 时间计数等方面的系统 定义提示行字符串 调用方法. 实验内容: 计算机系统的 时间计数器每 55ms 计数 定义