汇编实验报告一
汇编语言实验报告1~7

汇编语言实验报告1~7实验一:数据传输指令、算术指令、逻辑指令的使用实验内容:利用汇编语言,编写一个程序,实现两个整数相加,并将结果存入第三个变量中实验步骤:1. 声明三个变量a、b、c2. 将10存入a,将20存入b3. 将a的值传入al,将b的值传入bl4. 使用add指令将al和bl相加,将结果存入al5. 将al的值传入c6. 显示c的值实验结果:a db 10mov al,aadd al,blint 21hmov ax,4c00h实验二:分支指令的使用实验内容:利用汇编语言,编写一个程序,实现当输入的值为正数时,输出"I'm positive!";当输入的值为负数时,输出"I'm negative!";当输入的值为零时,输出"I'm zero!"1. 定义一个变量num2. 接收用户输入,并将其存储在num中3. 用test指令判断num的值4. 当num=0时,执行输出"I'm zero!"的指令7. 退出程序num db ?lea dx, promptsub al, '0'test num, numjz zerojs negjmp positiveneg:output:zero_msg db 'I am zero!$'prompt db 'Please enter a number:', 0dh, 0ah, '$'1. 定义变量i、sum,分别表示累加的数字和累加和2. 将i赋初值1,sum赋初值03. 进入循环5. 使用inc指令将i加16. 使用cmp指令将i与10比较,如果i小于等于10,继续循环,否则退出循环7. 输出结果mov bx, iloopStart:inc bx实验四:过程调用的使用2. 循环遍历1到100之间的每个数3. 用一个for语句嵌套一个for语句判断该数是否为质数4. 用两个自定义的子程序is_prime和output输出结果call is_primeskip:cmp i, 100prime_loop:div blretje newlinejmp done实验目的:掌握字符串操作指令的使用实验内容:利用汇编语言,编写一个程序,将字符串"SJTU"改为字符串"MIT"1. 定义字符串SJTU和MIT2. 定义两个变量i和len,分别表示字符串的下标和长度3. 使用movsb将SJTU的值传到MIT中4. 输出MITSJTU db 'SJTU'lea si, SJTUstringLoop:实验内容:利用汇编语言,编写一个程序,实现将输入的字符串写入一个文件中,然后再读取该文件中的字符串并输出2. 打开文件3. 将字符串写入文件中4. 关闭文件6. 读取文件内容8. 输出读取的字符串fileName db 'test.txt'content db 32 dup(?)mov cx, word ptr [content]实验内容:利用汇编语言,编写一个程序,在系统按下Ctrl+C时,输出一条信息并退出1. 声明函数handleCtrlC2. 获取中断21的地址,将其存储到文件头中org 100hmov [old_int_21h], es:bxmov dx, offset handleCtrlCend开始:。
汇编语言实验报告1

(2)指出以上汇编语言指令中源操作数使用的是什么寻址方式?
(3)用T命令单步跟踪,观察指令的执行结果,并记录
1、查看内存单元内容,pc机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH 的某几个单元
中,请找到这个生产日期并试图改变它
2、向内存从B8100H开始的单元中填写数据,如:
-e b810:0000 01 01 02 02 03 03 04 04
三、实验报告要求
把实验任务中要求的各项记录填写在相应的题目下(可以文字或图片)作为实验报告上交。
图片可以利用prtscn 键拷贝。
四、实验小结
写出本次实验小结:
通过本次实验学会了如何下载安装以及配置dosbox masm611
R命令:查看程序运行前的寄存器组初始值
U:查看程序反汇编代码
T:单步调试;格式:T[=地址] ;T[=地址][x]
D:观察内存变化D起始位置;D 起始位置结束位置;D 起始位置L 长度
G地址,程序从当前位置直接运行到指定地址处停下。
E地址修改内存中的内容,:E 起始地址字节值表;E 起始地址
Q 退出DEBUG程序,返回DOS
让我知道了一定要看清楚,想清楚,检查清楚,再点回车不然要该好多地方。
汇编语言程序设计实验报告(1)

实验一单指令功能测试实验一、实验目的1.会使用DEBUG软件;2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容P129,14题三、实验要求:1. 在上机实验之前,首先做完作业;2. 设计如何验证指令执行的正确性操作,并在作业中描述;3. 周五上机验证,并给出上机结果。
若有出入,简要说明原因。
4. 实验报告当堂提交。
实验二完整的汇编语言程序设计实验一、实验目的1.掌握完整的汇编语言源程序的设计方法;2.掌握汇编语言源程序的执行过程。
二、实验内容设计一个程序,将所有的小写字母转换为大学字母,此程序不能改变除字母a~z外的任何其它字符。
三、实验要求(结果)1. 在上机实验之前,首先编写程序;2. 周一上机调试程序,并给出修改、运行正确的源程序;3. 分析错误原因;4. 实验报告当天提交。
实验三子程序设计实验一、实验目的1.掌握汇编语言源程序子程序设计方法;2.会使用CV软件工具。
二、实验内容编写子程序:判断三边能否构成三角形;编写主程序:输入三边,调用子程序判断,若能,则输出“Y”,否则输出“N”。
共判断10次。
三、实验要求同实验二。
实验四 宏汇编程序设计实验一、实验目的1.掌握宏汇编程序编程技术及宏调用的方法;2. 了解浮点CPU 编程方法及特点。
二、实验内容求(1+2+3+4+5+6+7+8+9)⨯LC π21的和。
三、实验要求1. 利用重复宏定义实现1、2、3⋯9数据的定义;2. 编写程序,上机验证结果的正确性。
3. 其它要求同前。
实验五 多模块程序设计实验一、实验目的1.掌握汇编段的属性的含义;2. 掌握利用LINK 将多模块连接起来的方法;3.掌握利用库文件将多模块连接起来的方法。
二、实验内容将字符串反序。
具体要求:1. 子模块:完成反序。
2. 主模块:输入字符串,调用子模块,显示反序后字符串。
3. 用 LINK 或库文件的方法实现多模块连接。
4. 其他要求同前。
实验六 混合程序的开发实验一、实验目的1.了解混合调用中的参数设置;2. 掌握混合调用的方法;二、实验内容求(1+2+3+4+5+6+7+8+9)⨯LC π21的和,并将和显示在屏幕上;具体要求:1. 用汇编语言完成子程序LC π21的编程;2. 通过C++完成实验内容的要求。
汇编实验报告1

实验一汇编语言程序设计上机及debug的使用一、实验目的及要求1.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
2.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容一,.编辑一个源程序经汇编,链接成可执行程序,然后debug,练习各种指令的用法;编辑源程序:开始汇编如图:执行程序:DEBUG:采用执行过程命令P进行调试,g输出结果;二,,DEBUG的使用;1.进入DEBUG,使用A命令将源程序写入内存并汇编,然后使用G命令执行程序,接着用D命令观察运算结果后,再用U命令反汇编,用Q命令退出DEBUG,返回DOS提示符。
用A 指令写入程序,用E命令将0102H, 0304H分别写入 0120H和0122H单元如图:用G执行程序,用D输出结果:用U命令反汇编程序和用Q退出程序如图:2.进入DEBUG,先显示200H处开始的一片单元,接着用E命令将一段机器代码指令写入200H~208H,然后用G命令执行,再用U命令反汇编。
具体操作如下:(1)首先进入DEBUG,接着显示200H处开始的一片单元(如果不指明显示范围,则默认显示128个存储单元),如图12所示。
_d 200(2)用E命令将机器代码指令写入200H开始的内存单元,如图13所示。
接着观察由200H开始的单元,确实写入的机器指令代码,如图14所示。
(3)用G命令从200H处开始执行程序,如图15所示。
执行结果是在屏幕上显示字符“3”。
(4)用U命令反汇编,显示200H处存放的程序,如图:3.进入DEBUG,用A命令写入程序,接着用R命令显示状态,并用T命令单条执行,注意在执行命令的同时观察相应寄存器的状态。
具体操作如下:(1)进入DEBUG,用A命令写入汇编源程序,Ctrl+C退出A命令,如图:(2)用R命令显示寄存器状态,可以只显示AH和AL寄存器状态,也可以显示所有寄存器状态,如图18和图19所示。
由图中可以看出,在没有执行指令之前,AH和AL寄存器没有被赋值,其值为0。
汇编实验一实验报告

汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一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 寄存器的内容变化,尤其是标志位的变化。
汇编语言实验报告一.doc

汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。
(2)用MASM程序产生OBJ文件。
(3)用LIINK程序产生EXE文件。
(4)程序的运行(用DEBUG或在DOS下直接运行)。
2.掌握DEBUG的使用方法。
二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。
2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。
3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。
三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。
2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。
3、定义数据段附加段,先移高位,这样要移20次。
四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。
汇编实验1报告

实验一认识汇编、熟悉环境1、实验目的熟悉使用宏汇编程序MASM汇编,并运用源程序的方法,掌握使用该方法的上机步骤,并将预先编好的程序上机调试运行。
了解并掌握汇编程序的输入,调试和运行过程。
搞清程序在运行中,寄存器、存储单元以及状态标志的影响变化。
2、实验要求通过对以及上机实验,查看显示结果,熟悉MASM的基本界面以及程序编译运行过程。
3、实验补充Debug 常用命令:A 汇编,直接输入汇编语句R 查看、改变CPU寄存器的内容r 寄存器D 查看内存中的内容 d 段地址:偏移地址T 单步执行一条机器指令P 单步执行,与T的区别是直接跳过循环,不跟踪子程序G 执行到断点后停止4、实验内容(1)输入以下程序,编译并运行,查看显示内容,并将内容记在实验报告上。
(2)如果要使窗体显示;1+1=2Oh! You are right!程序将改成什么样?(3)更改程序,使得自己的名字(拼音)出现在窗体中。
(4)将下面源程序粘贴在新文件中:CODES SEGMENTSTART:mov AX,0MOV AL,18HADD AL,0FCHCODES ENDSEND START首先自己预判加法运行后6个标志位的变化。
写在实验报告中。
(5)保存文件为test2。
预判运行ADD语句后SF,ZF,CF,AF,OF,PF标志位的值,记录下来。
根据下表,在DEBUG中显示的8个标志位:.输入t命令跟踪运行后,查看到计算完后各个寄存器以及标志位的值,截图下来。
看看与自己的预判一不一致,不一致的话自己查找原因。
运用DEBUG 的命令进行调试、查看内存等功能。
5、实验学时:4学时。
填写实验报告,上传到FTP服务器。
贵州民族大学信息工程学院计算机科学与技术系上机实验报告)如果要使窗体显示;1+1=2等语句。
汇编试验报告_1

学院(系)名称:计算机ቤተ መጻሕፍቲ ባይዱ通信工程学院
姓名
学号
专业
信息安全
班级
实验项目
Debug编程基础
课程名称
汇编语言
课程代码
0662633
实验时间
2016年3月29日3 - 4节
实验地点
7-212
批改意见
成绩
教师签字:
实验目的:
a.查看CPU和内存,用机器指令和汇编指令编程
1.掌握Debug基本命令及其功能
push bxsp=00FEH;修改的内存单元的地址是:0AE3:011F内容为:53H
运行截图:
(2)仔细观察下图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会改变?
变?
结论:随着程序的运行寄存器的内容被修改了,如0108为IP的值,0B39为CS的值。
c.汇编语言程序的调试和运行
先填写不同的数据,观察产生的现象;再改变填写的地址,观察产生的现象。
运行截图:
结论:因为地址A000~BFFFH是显存的地址空间,故而向内存中写入数据,debug窗口出现“图片”。
b.用机器指令和汇编指令编程
(1)使用Debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情
况填空。
mov ax,ffff
04 9cadd al,9CH
提示:可用E命令和A命令以两种方式将指令写入内存。注意用T命令执行时,CS:IP的指向。
运行截图:
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次
方。
程序代码:
mov ax,1
add ax,ax
jmp 2000:0003
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计实验报告实验名称上机过程及顺序结构与分支结构程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义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)分支程序设计实验实验预习内容:在实验前了解分支结构的特点,明白跳转指令和程序转移指令的使用的使用,以及两个数进行比较后各个标志位的变化。
实验思路:首先定义三个数,先比较前两个数的符号,如果相同则比较第二个数字和第三个数的符号,如果相同,利用左移一位判断正负,之后进行显示。
程序流程图:四、 实验的步骤与调试方法(1)熟悉上机练习过程和伪指令实验 实验步骤:上机实验首先要配置editplus 的环境,之后输入代码,运行debug ,在debug 中输入相应的指令,观察结果。
在程序中首先定义数据段和代码段,在定义数据时使用伪指令定义,之后运行debug ,了解了数据在内存中的存储。
之前对debug 的理解不深,有很多语句都不能很好的使用和理解,在经过这次实验后,对于数据的存储和debug 有了更深的理解。
程序二自行分析的数据存储情况: DA TA1: DA TA2: DA TA3:(2)顺序结构程序设计实验本实验刚开始规定用查表法来实现。
首先定义数据段定义数字,输入数字,将其转化成对应的地址偏移量,求的数据的地址送入BX ,求得平方后除以10得到商和余数,利用十进制与ASCII 码的转化将其输出到屏幕上。
十六进制与十进制类似,INT 21的2号功能每次只能输出一个字符,因此,需要将将结果转化成一个高位和一个低位存在不同寄存器中分别输出。
在实验过程中对于不能正确运行的时候,使用debug 中的T 和P 命令来执行得知程序执行情况。
(3)分支程序设计实验首先,实验先定义数据段的数据,通过将SI 的值赋为0,得到第一个数据的有效地址,将数据送入寄存器得到CF 值,之后按照同样的方法取得第二个数字,并把其送入寄存器。
使用RCL 指令将最高位送入CF 中,得到CF 是0还是1,如果不相同则取第三个数据进行比较,否则输出空格。
在取第三个数据之后仍然左移一位,得到CF 位,判断CF 是否相同,如果不同,则输出空格,如果相同则继续判断CF 位的数值,如果数值为1,则输出负号,如果数值为0,则输出正号。
实验开始不能很好的使用跳转命令等指令,走过很多弯路,在经过学习后,更好的了解了各种跳转指令。
在实验的过程中,开始不能输出负号,经验证得知没有很好的输入int 21H 的功能,因而无法正常从显示屏里输出。
经过更改,程序正常运行。
五、实验数据与实验结果实验一程序一:首先使用指令T 进行单步执行操作,执行的结果如下:从中可以看出初始的值为13和26,之后继续进行单步执行,知道程序的结束,此时程序执行完毕,执行结果如下:之后,执行D 0B3E:0002观察结果,得知此时的和为39,结果如下图:之后,使用E命令,在E后加入数据地址,之后输入要修改的数据,将13改为3,将26改为5,并且使用了D命令观察数据是否更改,经验证数据已经进行了更改,结果如下图:之后,使用G命令来继续执行程序,结果如下图:之后使用D命令来显示结果得知结果为8,结果正确:使用A命令来更改ADD为SUB,首先使用U命令来进行反汇编,找到ADD所在的地址,使用A命令,在A后面加上ADD的地址进行修改,如下图:之后进行单步执行得到结果如下得到减法的结果为ED:程序二:经过debug的D命令显示,得到如下结果经过和之前实验预先的猜测一致,这样进一步加深了我对汇编语言数据的存储的理解。
实验二:输入3,得到的运行结果为输入5,结果如图:实验三:实验中初始定义的值为-1,-2,-3经过单步运行结果如下:此时DL的值为2D,负号的ACSII码值为2D,所以输出结果正确。
之后把数据更改为1,2,3,输出结果如下,此时DL的值为2B,结果正确,示意图如下:使用E命令来修改数据:运行结果之后将数据更改为1,-2,-3,得到结果DL的值为20,结果仍然正确六、实验用程序清单(要有注释)(1)熟悉上机练习过程和伪指令实验题目一:DSEG SEGMENT ;数据段开始DA TA1 DB 13H,26H ;原始数据DA TA2 DW 0 ;保存结果单元DSEG ENDS ;数据段结束SSEG SEGMENT STACK ;堆栈段开始SKTOP DB 20 DUP(0)SSEG ENDS ;堆栈段结束CSEG SEGMENT ;代码段开始ASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGSTART: MOV AX,DSEG ;初始化数据端地址MOV DS,AXMOV AX,SSEG ;初始化堆栈段地址MOV SS,AXMOV SP,LENGTH SKTOP ;设置堆栈指针MOV AL,DA TA1 ;取第一个数据ADD AL,DA TA1+1 ;与第二个数据相加MOV BYTE PTR DA TA2,AL ;保存结果MOV AH,4CHINT 21H ;返回DOSCSEG ENDS ;代码段结束END START ;源程序结束题目二:DSEG SEGMENT ;数据段开始DA TA1 DB 3,-3,'A'DA TA2 DW 3,-3,'A'DA TA3 DD 3,-3,'A'DSEG ENDS ;数据段结束SSEG SEGMENT STACK ;堆栈段开始SKTOP DB 20 DUP(0)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEG ;代码段开始START: MOV AX,DSEG ;初始化数据段基址MOV DS,AXMOV AX,SSEG ;初始化堆栈段基址MOV SS,AXMOV AH,4CHINT 21H ;返回DOSCSEG ENDS ;代码段结束END START ;源程序结束(2)顺序结构程序设计实验DSEG SEGMENT ;建立数据段NUM DB 0D,1D,4D,9D,16D,25D,36D,49D,64D,81DSSEG SEGMENT STACK ;建立堆栈段SKTOP DB 20 DUP(0)SSEG ENDS ;堆栈段结束CSEG SEGMENT ;代码段开始ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEG ;初始化MOV DS,AXMOV AX,SSEGMOV SS,AXMOV SP,SIZE SKTOPMOV BX,OFFSET NUM ;制表MOV AH,01HINT 21H ;输入一个数,存入寄存器PUSH AX ;保存输入的数字MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21H ;回车换行POP AXSUB A L,30H ;转化成0-9的数字其中30h为0的ASCII码XLA TPUSH AX ;AX入栈XOR AH,AHMOV CH,10DIV CHADD AL,30HMOV CH,AHMOV DL,ALMOV AH,02HINT 21H ;转化成十进制MOV DL,CHADD DL,30HMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02H ;输出结果INT 21HPOP AX ;ax出栈MOV DL,16DIV DLMOV CH,AH ;除以16得到的余数MOV CL,AL ;除以16得到的商ADD AL,30HMOV DL,ALMOV AH,02HINT 21H ;输出高位ADD CH,30HMOV DL,CHMOV AH,02HINT 21H ;输出低位MOV AH,4CHINT 21HCSEG ENDS ;代码段结束END START ;程序结束实验三:DSEG SEGMENT ;数据段开始NUM DB -1,-2,-3DSEG ENDS ;数据段结束CSEG SEGMENT ;代码段开始SSEG SEGMENT STACK ;建立堆栈段SKTOP DB 20 DUP(0)SSEG ENDS ;堆栈段结束ASSUME CS:CSEG,DS:DSEGASSUME SS:SSEGSTART: MOV AX,DSEG ;初始化MOV DS,AXMOV AX,SSEG ;初始化堆栈段地址MOV SS,AXMOV SP,LENGTH SKTOP ;设置堆栈指针MOV SI,0 ;将0赋给SI,使偏移地址为0AGAIN: RCL NUM[SI],1 ;带进位左移一位JNC NEXT1 ;若CF=0,跳到NEXT1INC SI ;得到下一个数RCL NUM[SI],1 ;带进位左移一位JNC NEXT2 ;第一个是正数,第二个数是负数,跳到NEXT2INC SI ;取下一个数RCL NUM[SI],1 ;带进位左移一位JNC NEXT2 ;1和2为负数,3为正数,跳到NEXT2MOV DL,2DH ;都为负数,输出负号JMP FINISHNEXT1: INC SIRCL NUM[SI],1JC NEXT2 ;1为正数,2为负数,到NEXT2INC SIRCL NUM[SI],1JC NEXT2 ;1,2为正数,3为负数,到NEXT2MOV DL,2BH ;1,2,3为正数,输出正号JMP FINISHNEXT2: MOV DL,20HJMP FINISHFINISH: MOV AH,02HINT 21HMOV AH,4CHINT 21HCSEG ENDSEND START五、思考题(必需回答)写明如下问题1.按照操作顺序写出上机操作的步骤;答:首先应该配置EditPlus,然后使用masm.exe编译,生成.obj文件,之后使用link.exe连接,生成可执行文件,之后用cmd/c运行,最后用debug进行调试。