汇编实验一实验报告
《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
汇编实验报告一

汇编语言程序设计实验报告实验名称上机过程及顺序结构与分支结构程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM的使用;4、熟练掌握连接程序LINK的使用;5、学习数据传送及算数和逻辑运算指令的用法;6、掌握分支程序的结构;7、掌握分支程序的设计、调试方法;8、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序;二、实验环境操作系统:Windows XP调试软件:Edit Plus 3,MASM 5.0上机地点:综合楼311三、实验的预习内容(1)熟悉上机练习过程和伪指令实验实验预习内容:在实验前,充分熟悉Edit Plus 3的环境以及配置方法,熟悉各种debug 的常用指令:U、D、T、P、G、A、E及R命令的使用和含义,了解数据传送指令和算数以及逻辑运算指令的用法,在理论上了解数据的存储情况以及DD,DB,DW伪指令的用法和含义。
实验思路:按照书上的程序打入代码,进行汇编、连接和运行程序查看此时程序的运行情况,之后进入debug界面,分别使用U、D、T、P、G、A、E及R命令等常用指令,可查看此时的程序的执行状况以及此时寄存器的存储情况以及对于内存的使用情况。
程序一流程图:程序二流程图:(2)顺序结构程序设计实验实验预习内容:在实验前了解十进制,十六进制和ASCII 码之间的转换,了解如何从键盘中输入字符和回车换行,以及在屏幕中显示的汇编指令。
实验思路:从键盘中输入要计算的数字,将其进行平方运算,利用计算得到数字,了解十进制数字、十六进制数字与其对应ASCII 码的转换方法,将数字显示到屏幕上。
程序流程图:(3)分支程序设计实验实验预习内容:在实验前了解分支结构的特点,明白跳转指令和程序转移指令的使用的使用,以及两个数进行比较后各个标志位的变化。
汇编实验报告(详细版)

计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八院系专业:计算机学院计算机科学与技术姓名:xxxxxxxxx学号:*******xxxxx完成时间:2012年12月1日计算机组成与汇编语言实验报告printf("输入的二进制数不正确!!");break;}}}if(a[15]=='1')s++;for(i=1;i<16;i++){if(a[15-i]=='1')s+=(1<<i);}printf("二进制: ");puts(a);printf("对应的十进制为: ");printf("%d\n",s);}程序1运行结果:实验情况与体会:运行过程中出现过不能判断是否输错的情况以及权位判断有误等情况,经过思考和修改后修改正确,说明理解好二进制与十进制之间的转换过程很重要。
编程过程中主要碰到的问题是,不够十六位的时候要在前面补零。
转换方法主要是除二求余的方法。
注:篇幅不够,可以另外附页。
计算机组成与汇编语言实验报告姓名xxxx 学号2011004xxxx 计分专业软件工程班级xxxxx 实验日期2012年 12 月 1日实验名称实验六分支结构程序设计实验目的●熟悉有符号定点数的表示。
●掌握原码、补码、反码之间的相互转换程序设计。
实验内容说明:该程序中X=23,Y=45,他们之差的绝对值为22,用16进制表示为0016H,即图中显示的结果2.调试程序2:DATA SEGMENTADD AL, 07HLP4: ADD AL, 30H ;将低四位转化为相应的ASCII码并以字符形式输MOV DL, ALMOV AH, 2INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
上机实验过程:说明:求出三个数里面的最大数73;3. 编写程序1:编程实现从键盘输入一位数字,判断其奇偶性,并在屏幕上输出一个标志,若为奇数,则输出1,否则输出0。
汇编实验报告

汇编语言实验报告学院:计算机学院专业:网络工程指导老师:纪平实验一汇编语言程序调试方法一、实验目的,1,熟悉汇编语言运行环境和方法2,了解如何使用汇编语言编制程序3,熟悉debug有关命令的使用方法4,利用debug掌握有关指令的功能5,利用debug运行简单的程序段二、实验内容1,学会输入、编辑汇编语言程序2,学会对汇编语言程序进行汇编、连接和运行3,进入和退出debug程序4,学会debug中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
三、实验准备1,仔细阅读有关汇编语言环境的内容,事先准备好使用的例子。
2,准备好程序清单、设计好调试步骤、测试方法、对运行结果的分析3,编写一个程序:比较2个字符串所含的字符是否相同。
若相同则显示’Match.’,否则显示’No match!’。
4,仔细阅读有关debug命令的内容,对有关命令,都要事先准备好使用的例子。
四、实验步骤1,在DOS提示符下,进入masm目录。
2,在MASM目录下启动edit编辑程序,输入源程序,并对其进行汇编、连接和运行。
(1)调用edit输入、编辑源程序并保存在指定的目录中。
例:edit abc.asm(2)用汇编程序masm对源程序汇编产生目标文件obj。
例:masm abc(3)用连接程序link产生执行文件exe。
例:link abc(4)执行程序3,详细记录每一步所用的命令,以及查看结果的方法和具体结果。
五、实验结果1,输入sample.asm的源码;PROGRAM TITLE GOES HERE--Compare string;************************************************************************** **datarea segment ;define data segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.';mess1 db 'Match',13,10,'$'mess2 db 'No match!',13,10,'$'datarea ends;************************************************************************** **program segment ;define code segment;----------------------------------------------------------------------------main proc farassume cs:program,ds:datarea,es:datareastart: ;starting execution address;set up stack for returnpush ds ;save old data segmentsub ax,ax ;put zero in AXpush ax ;save it on stack;set DS register to current data segmentmov ax,datarea ;datarea segment addrmov ds,ax ;into DS registermov es,ax ;into ES register;MAIN PART OF PROGRAM GOES HERElea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int 21hret ;return to DOSmain endp ;end of main part of program;--------------------------------------------------------------------program ends ;end of code segment;****************************************************************** **end start ;end assembly2,汇编生成目标文件3,连接生成exe文件4,执行程序5,调试程序-g命令在debug环境下运行该文件-d0(-d ds:ea)命令显示指定数据段地址中的内容-u命令显示汇编源程序-e ds:ea更改指定位置的内容实验二用DEBUG编程使用堆栈段AX和BX的内容进行交换等一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
汇编语言实验报告

汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。
三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。
2、实现数据在不同寄存器和内存单元之间的传送。
(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。
2、进行移位操作,包括左移和右移,理解移位对数据的影响。
(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。
2、根据给定的条件,使用分支结构实现不同的操作。
(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。
2、在主程序中调用该子程序,并输出结果。
四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。
2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。
3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。
4、最后,使用`MOV` 指令将结果存储到指定的内存单元。
(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。
2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。
3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。
(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。
2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。
(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。
汇编实验报告

汇编实验报告概述:本次实验主要通过汇编语言的学习和实践,加深对汇编语言的理解并掌握其基本操作和使用方法。
我们使用了x86汇编语言,以及相关的工具和环境。
一、实验背景汇编语言是计算机底层的一种编程语言,通过对计算机底层指令的直接操作,可以实现对硬件的控制。
汇编语言是学习高级编程语言的基础,也是了解计算机运行机理的关键。
二、实验目的1. 理解汇编语言的基本原理和特点;2. 掌握汇编语言的基本指令和语法;3. 学会使用汇编语言进行简单的程序设计和调试。
三、实验环境和工具1. 操作系统:Windows 10;2. 开发工具:MASM(Microsoft Macro Assembler);3. 测试工具:DOSBox。
四、实验过程1. 安装和配置实验环境首先,我们需要安装和配置MASM和DOSBox。
MASM是一款由微软开发的汇编语言开发工具,通过它可以将汇编语言代码转化为可执行文件。
DOSBox是一个模拟DOS环境的工具,能够在现代操作系统上运行旧版的DOS程序。
2. 学习和练习基本指令接下来,我们通过学习和练习基本指令,来掌握汇编语言的基本用法。
我们开始学习如何在汇编语言中定义和初始化变量,以及如何进行算术运算和逻辑运算。
同时,我们还学习了如何使用循环和条件语句。
3. 编写和运行简单程序在掌握了基本指令之后,我们开始编写一些简单的程序,并通过MASM将其转化为可执行文件。
我们编写了一个通过计算两个数的和来演示算术运算的程序,并使用DOSBox来运行这个程序,观察其运行结果。
4. 调试和优化程序在运行程序的过程中,我们发现了一些问题和bug。
我们使用调试工具对程序进行调试,通过逐步执行代码并观察变量的值来发现问题所在。
我们找到了一个变量定义错误的bug,并进行了修复。
此外,我们还通过代码优化来提高程序的性能和效率。
五、实验结果和分析经过一系列的实验和练习,我们成功地掌握了汇编语言的基本操作和使用方法。
我们能够编写简单的汇编程序,并通过MASM将其转化为可执行文件。
汇编语言编程实验报告

汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
第二种方式,是输入汇编语句。
重启Debug 程序。
先输入“a CS:100 ”,然后输入:MOV AX, FF00ADD AX,01F0MOV BX,AXNEG BXADD AX,BX输入“u CS:100 10A ”就可以得到这几条语句的机器码。
把机器码记录下来:使用命令“r ip ”再输入“100 ”,可以将寄存器IP 中的内容置为“100H”。
再输入“r ”观察CPU 的状态,然后反复输入“t ” 跟踪程序,直到程序结束。
解释为什么标志位内容会有改变?另外,说明这段程序完成什么任务?答:(1)执行完指令: add ax,01f0后结果为100f0H 发生了进位,进位标志位发生改变,并且二进制的100f0H 中1 的个数为偶数,所以奇偶标志位发生了改变。
(2)执行完指令:neg bx 即求补指令,bx由正数变为负数,符号标志位发生改变;二进制的1的数量有偶数变成奇数,奇偶标志位发生改变。
(3) 执行完指令:add ax,bx,ax由00f0H 变为10000H,符号标志位发生改变,零标志位发生改变,奇偶标志位发生改变。
重新把寄存器IP 的内容变为100H,不使用跟踪命令“t”,改用“g 10c”来完成程序。
程序中还可以加断点,做法是在程序中加入“int 3” 这条指令。
如果这条指令在程序的末尾,我们可以通过输入“g ” 来完成运行程序。
这样就不需像上面需要告诉Debug 程序最后机器码字节的地址偏移量了。
“int 3”是Debug 中很有效的返回控制指令。
把这条指令放在程序中必要的位置上,在这条指令后面的代码在不允许时就不会运行。
3.ASCII 字符码,从键盘输入,从显示器输出(i) 标准ASCII ( American Standard Code for Information Interchange ) 码使用7- bit 二进制数来代表字符。
一般文本信息经常用ASCII 编码。
使用命令“a CS:100 ”, 输入下面的代码:MOV BX,0MOV [BX],BLINC BXCMP BH,1JNE 103INT 3使用“d DS:0 100 ”命令,显示程序运行前相应内存段中的数据。
运行上面的程序来填充DS:0000-00FF 这段内存中的内容。
再次输入“d DS:0 100 ”命令来显示填充的内容。
在窗口的右边,可以看到相应的ASCII码字符。
如果填充的内容不是字符,显示就用点表示。
用类似方法,如何将字符串“How are you?”写入计算机内存呢使用如下汇编指令:mov bx,0mov al,48mov [bx],alinc bxmov al,6fmov [bx],alinc bxmov al,77mov [bx],alinc bxmov al,61mov [bx],alinc bxmov al,72mov [bx],alinc bxmov al,65mov [bx],alinc bxmov al,79mov [bx],alinc bxmov al,6fmov [bx],alinc bxmov al,75mov [bx],alinc bxmov al,3fmov [bx],alint 3(ii) 计算机的BIOS ( Basic Input / Output System ) 程序有很多子程序,用来通过标准外设处理输入和输出,比如,键盘和显示器。
BIOS 的程序都可以通过称为系统中断的特殊指令被调用。
例如:INT 16H 返回值是把下一个键盘输入值送入寄存器ALINT 10H 当BH = 0 时,将光标移到由寄存器DH 和DL 内容所指定的行和列的位置上INT 21H 当AH = 2 时,将DL 中的内容作为ASCII 码的字符显示出来INT 21H 当AH = 9 时,将位于DS:DX 的内容显示为字符串( 一个ASCII 码序列由$ 符作结束符)。
(ii)(a) 将下列代码输入程序段CS:0100 中:MOV AH,0INT 16HINT 3JMP 100使用“u CS:100 110 ” 命令,将程序转换为机器码。
其中“JMP 100”的机器码是“EBF9”。
如果使用的是相对寻址方式,我们可以猜测出机器码中“F9”的含义么?相对寻址方式比绝对地址方便的地方是什么?-7的补码是F9H 即向上跳转到前面7字节单元的位置。
使用相对寻址可节省指令中的地址位数,也便于程序在内存中成块搬动重置IP 的内容为100H,再输入“g ”来执行程序。
程序中断时,输入字母“B”,检查寄存器AL 中的内容为:____62H_____重复上面的动作,但输入不同字母,记录下每次AL 中的内容,能不能判断出来,这段程序的功能是什么?答:读入键盘键入的一个字母,送入寄存器AL。
(ii)(b) 将下面的代码输入CS:200 中:MOV BH,0MOV DL,0MOV DH,0MOV AH,2INT 10MOV DX,0MOV AH,9INT 3通过命令“e DS:0 68 65 6C 6C 21 24 .”在内存数据段中输入了一个字符串,将IP 设为200,输入“g .” 来运行程序,在屏幕左上角能找到输入的字符串是什么:____hell!_________ 这个程序是用来做什么的?答:将光标移到由寄存器DH 和DL 内容所指定的行和列的位置即第0行第0列的位置,并将位于DS:0 的内容显示为字符串,即显示’ hell!’。
4. 内存寻址把下面程序输入到内存中以地址CS:0000 为起始的代码段中。
MOV AX,33MOV AX,[SI]MOV AX,[SI+2]MOV AX,[SI]2MOV AX,[25]MOV AX,[BX+SI]MOV AX,[BX+SI-3]MOV AX,20[BX+SI-10]INT 3这些指令分别使用了哪些寻址方式?答:MOV AX,33 //立即数寻址MOV AX,[SI] // 寄存器间接寻址MOV AX,[SI+2] // 寄存器相对寻址MOV AX,[SI]2 //寄存器相对寻址MOV AX,[25] // 直接寻址MOV AX,[BX+SI] //基址加变址寻址MOV AX,[BX+SI-3] // 相对基址加变址寻址MOV AX,20[BX+SI-10] // 相对基址加变址寻址将上面的程序翻译为机器码时,可以发现有些指令的机器码是相同的。
哪些代码的机器码相同?根据发现,得出的结论是什么?答:指令: MOV AX,[SI+2]和指令:MOV AX,[SI]2 的机器码是相同的。
两条指令的机器码相同(8B4402),二者表达方式不同,但是达到的寻址目标是一样的。
将数据段与代码段对齐,将数据段中前40H 字节的数据显示出来,使用命令“d DS:0 40 .”,把这些数据记录下来。
假设BX 和SI 中的内容分别是12 和17,判断一下程序运行后的结果是什么?跟踪程序,记录AX 寄存器中的内容,与你预计的结果相符么?答:预测最后AX的值变为相对DS中的基址偏移量为20+12+17-10=39的值运行结果:AX=FFFF与预测相同。
(i) 将程序输入内存中以地址CS:0000 为起始的代码段中:MOV BX,22MOV AX,33PUSH AXPUSH BXMOV AX,0MOV BX,0POP AXPOP BXINT 3跟踪程序,记录发现的变化。
不要忘记运行前要把IP 的内容变为0。
步骤AX BX SP 堆栈内容1 0H 22H 00FDH 空2 33H 22H 00FDH 空3 33H 22H 00FBH 0033H4 33H 22H 00F9H 0033H 0022H5 0 22H 00F9H 0033H 0022H6 0 0 00F9H 0033H 0022H7 22H 0 00FBH 0033H8 22H 33H 00FDH 空增加什么语句,能够使AX 和BX 的内容在程序运行后被恢复。
push axpush bxpop axpop bx(ii) 重启Debug将指令"INT 3" 在代码段地址CS:100 中输入。
输入“r .” 记录堆栈段和代码段的参数:SS:073F H SP:00FD H CS: 073F H IP:0010H将堆栈段中SS:FFE0 FFFF 的内容显示出来,记录堆栈段中的有效数据。
地址:执行"INT 3" 指令,引起CPU 的软件中断。
相应的中断程序被调用。
中断服务程序的最后一条指令是"IRET",它告诉CPU 中断服务结束。
一步步跟踪"INT 3" 直到"IRET" 指令被执行。