汇编实验2讲解
实验二拆字、拼字程序
班级:2学号:姓名:成绩:实验二拆字、拼字程序一实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。
二实验内容1.把2000H的内容拆开,高位送2001H低位,低位送2002H低位,2001H、2002H高位清零,一般本程序用于把数据送显示缓冲区时用。
ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A;(2000)→A→BSW AP A;交换ANL A,#0FH ;屏敝高位INC DPTRMOVX @DPTR,A;送2001HINC DPTRMOV A,BANL A,#0FH ;(2000)内容屏敝高位MOVX @DPTR,A;送2002HSJMP $END2. 把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节ORG 0680HSE03: MOV DPTR,#2000HMOVX A,@DPTRANL A,#0FH ;(2000H)内容屏敝高位SW AP A;交换MOV B,A;保存INC DPTRMOVX A,@DPTR ;(2001H)内容送AANL A,#0FH ;屏敝高位ORL A,B ;或INC DPTRMOVX @DPTR,A;送2002HSJMP $END三实验步骤编译、装载程序,以连续或单步方式运行程序,检查2000~20FFH中执行程序前后的变化。
四思考1.将2000的高低位分别送入3000H、3001H的高位, 3000H、3001H低位清零;ORG 0660HSE02: MOV DPTR,#2000HMOVX A,@DPTRMOV B,A;(2000)→A→BSW AP A;交换ANL A,#0FH ;MOV DPTR,#3000HMOVX @DPTR,A;送3000HINC DPTRMOV A,BANL A,#0FHMOVX @DPTR,A;送3001HEND2.把片内20H,21H的高位拼在一起送到片内30H单元。
十年(2012-2021)高考物理真题汇编专题06 力学实验2—验证牛顿第二定律及动摩擦因数(解析)
专题06力学实验2—验证牛顿第二定律及动摩擦因数的求解(2012-2021)目录题型一、摩擦因数的求解 (1)题型二、验证牛顿第二定律及其拓展类问题 (5)题型三、实验器材的读数及验证牛顿第二定律 (7)题型一、摩擦因数的求解1.(2021全国甲)为测量小铜块与瓷砖表面间的动摩擦因数,一同学将贴有标尺的瓷砖的一端放在水平桌面上,形成一倾角为α的斜面(已知sinα=0.34,cosα=0.94),小铜块可在斜面上加速下滑,如图所示。
该同学用手机拍摄小铜块的下滑过程,然后解析视频记录的图像,获得5个连续相等时间间隔(每个时间间隔∆T=0.20s)内小铜块沿斜面下滑的距离s i(i=1,2,3,4,5),如下表所示。
s1s2s3s4s55.87cm7.58cm9.31cm11.02cm12.74cm由表中数据可得,小铜块沿斜面下滑的加速度大小为___________m/s2,小铜块与瓷砖表面间的动摩擦因数为___________。
(结果均保留2位有效数字,重力加速度大小取9.80m/s2)【答案】(1).0.43(2).0.32【解析】(1)根据逐差法有()()()2254212222(12.7411.02)10(7.58 5.87)10m/s 0.43m/s 60.206s s s s a T --+-++⨯-+⨯==≈⨯∆(2)对小铜块受力分析根据牛顿第二定律有sin cos mg mg maαμα-=代入数据解得0.32μ≈2.(2020年北京).某同学利用图甲所示装置研究摩擦力的变化情况。
实验台上固定一个力传感器,传感器用棉线拉住物块,物块放置在粗糙的长木板上。
水平向左拉木板,传感器记录的F t -图像如图乙所示。
下列说法正确的是()A .实验中必须让木板保持匀速运动B.图乙中曲线就是摩擦力随时间的变化曲线C.最大静摩擦力与滑动摩擦力之比约为10:7D.只用图乙中数据可得出物块与木板间的动摩擦因数【答案】C【解析】AB .为了能研究摩擦力随时间的变化曲线,故物块一直要处于静止状态,则向左的摩擦力一直与向右轻绳的拉力平衡,图乙是向右轻绳的拉力随时间变化曲线,故图乙也可以反映摩擦力随时间变化的曲线,由图可乙知向右轻绳的拉力先增大后减小,最后趋于不变,故物块先受静摩擦力作用后受滑动摩擦力作用,所以不需要让木板保持匀速运动,故AB 错误;C .由图可知,最大静摩擦力约为10N ,滑动摩擦力约为7N ,故最大静摩擦力与滑动摩擦力之比约为10:7,故C 正确;D .结合滑动摩擦力的公式:f N F F μ=,N F mg=可知,由于不知道物块的重力,故无法求物块与木板间的动摩擦因数,故D 错误。
北京理工大学汇编实验二报告
北京理工大学汇编实验二报告本科实验报告实验名称:算术运算类操作实验课程名称:CPU与汇编实验实验时间:2015.10.29 任课教师:王耀威实验地点:10-102实验教师:潘丽敏实验类型:□原理验证■综合设计□自主创新学生姓名:王晓玥学号/班级:1120131332/05111311 组号:学院:信息与电子学院同组搭档:专业:信息工程成绩:一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握 BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有 MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、加减法处理指令主要有加法指令 ADD,带进位加法 ADC,减法指令 SUB,带进位减法指令 SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令 IDIV,以及符号位从字节扩展到字的指令 CBW 和从字扩展到双字的指令 CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的 BCD 码减法调整指令 DAS,非压缩的 BCD 码加法调整指令 AAA,非压缩的 BCD 码减法调整指令 AAS,乘法的非压缩 BCD码调整指令 AAM,除法的非压缩 BCD 码调整指令 AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表 1 所示的数据类型进行数据运算。
表 1-2-1 数据类型数据运算表数制二进制BCD码带符号无符号组合非组合运算符+、-、×、÷+、-+、-、×、÷操作数字节、字、多精度字节(二位数字)字节(一位数字)四、实验内容与步骤1、对于两组无符号数,087H 和 034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响:(1)实验流程将一组操作数分别用ADD,SUB,MUL,DIV运算(2)实验代码:DATAS SEGMENTBUF1 DB 087HBUF2 DB 034HBUF3 DB 4 DUP(?);此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,0MOV SI,AX;两数相加MOV AL,BUF1MOV BL,BUF2ADD AL,BLMOV BUF3[SI],ALMOV AL,0MOV AL,0INC SIMOV BUF3[SI],AL;两数相减MOV AL,BUF1MOV BL,BUF2SUB AL,BLINC SIMOV BUF3[SI],ALMOV AL,0SBB AL,0INC SIMOV BUF3[SI],AL;两数相乘MOV AL,BUF1MOV BL,BUF2MUL BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;两数相除,AL中存放商,AH中存放余数MOV AX,0MOV AL,BUF1MOV BL,BUF2DIV BLINC SIMOV BUF3[SI],ALINC SIMOV BUF3[SI],AH;此处输入代码段代码MOV AH,4CHINT 21HCODES ENDSEND START(3)实验结果:1)第一组操作数87H,34H2)第二组操作数0C2H,5FH(4)计算结果计算状态标志表达式结果CF AF ZF OF SF PF 087H+034H 00BB 0 0 0 0 1 1 087H-034H 0053 0 0 0 1 0 1 087H*034H 1B6C 1 0 0 1 0 0 087H/084H 02(1F) 1 0 0 0 0 1 0C2H+05FH 0121 0 0 0 0 0 0 0C2H-O5FH 0063 0 0 1 0 0 1 0C2H*05FH 47FE 0 0 0 0 0 1 0C2H/05FH 02(04) 0 0 0 0 0 0(5)各运算对状态标志位的影响及其意义。
汇编实验报告2
实验二指令系统与程序结构一、实验目的1.掌握算术运算指令、逻辑指令、转移指令的应用方法2.掌握伪指令的使用方法。
3.掌握汇编程序的结构。
4.进一步熟悉debug的使用。
二、实验内容1.运行debug,使用a 100命令输入下列程序段:Mov cl,8Rol ax,clInt 3u 100反汇编;用r命令将本人班级学号(如0801)输入ax,用单步运行命令p执行,记录最后ax的值,分析该段程序完成的功能。
若输入ax的值是1234h,程序段执行后ax的值是多少。
用a 100 指令输入,u100 指令反汇编如图:用r指令写入ax的值,用p指令执行如图;由于p是单步执行命令,所以有的输入后要执行几次才出结果:如输入0801,执行两次p命令后,ax变为0108;从新打开一个DOS窗口,再次输入ax=1234;执行两次p指令后ax变为3412;总结,此程序功能为把ax中的数据循环左移8位;2.输入并调试下列程序汇编后如图·链接后如图成为可执行文件:1.用debug 装入该程序(注意记录数据):使用u命令反汇编该程序,观察;连续2次使用p命令,观察段寄存器的值的变化;观察到:DS从0C2D变为0C3D;其他段寄存器无变化;分别为:ES=0C2D,SS=0C41,CS=0C51,;2.用D ds:0观察数据段的数据;用g 1f 执行到断点,再观察ds:0的数据变化情况。
说明红色区代码的功能。
数据段的变化如图:用g 1f命令执行到断点,ds:0观察结果如图:分析红色代码区功能为换行并空两个字符,打印十个字符;用 g 33执行到断点处,再观察ds:0的数据变化情况。
说明蓝色区代码的功能。
将蓝色代码的循环结构改为使用条件转移指令实现。
分析:紧接着打印8个字符,代码改为: xor si,sixor di,dimov cx,8next:mov dl,str[si+10]mov buf0[di],dlinc siinc dijmp next结果如图:实验总结:汇编实验看似简单,其实很有内涵,如不认真操作并寻找规律,很难出结果。
实验2-用户登录验证程序的实现
P_MODULE: MOV AH,2 ;换行 MOV DL,0AH INT 21H
MOV AH,09H ;DOS显示提示字符串 MOV DX,OFFSET PASSWORD INT 21H
MOV BX,OFFSET BUF1 MOV CX,LLL MOV COUNT,3
五、支撑毕业要求指标点
目标 3.1 使学生了解微型计算机硬件结构和微型计算机工作原理,掌握 Intel X86 指令系统。使学 生能够将掌握的软硬件相关工程基础知识,用于分析微型计算机及应用领域的相关工程问题。 目标 3.2 使学生掌握汇编语言程序设计方法,具备汇编语言程序开发能力,能够根据实验方案,配置 实验环境、开展实验,进行数据分析与处理,综合实验结果以获得合理有效的结论。
U_MODULE: ;用户名模块
3
MOV AH,09H ;DOS显示字符串 MOV DX,OFFSET MESG1 ;取偏移地址 INT 21H
MOV AH,0AH ;等待从键盘输入的字符串(在屏幕上显示),并保存在缓 冲区
MOV DX,OFFSET BUF;DX=缓冲区首地址 INT 21H
;判断用户名是否正确 MOV DI,OFFSET BUF+2 MOV SI,OFFSET USER CLD
10
六、指导教师评语 (含学生能力达成度的评价)
成绩
批阅人
日期
评分项 评 遵守实验室规章制度
学习态度
算法思想准备情况
程序设计能力
分
解决问题能力
课题功能实现情况
算法设计合理性
算法效能评价
回答问题准确度
安徽工业大学汇编第二次实验报告
汇编语言实验报告姓名:黄国荣专业:软件工程班级:104班学号:109074254指导老师:陆勤内容一编写一个程序,显示AL寄存器中的两位16进制数1、思路:首先将要十六进制数放到AL寄存器中,将AL中的数据放到DL中,将DL中的数逻辑右移4位,判断是否大于9,如果小于9则加30H将其转化为对应数字的ascii码输出,如果大于9就加37H将其转化为对应字母的ascii码输出。
2、写出源程序清单。
CODE SEGMENTASSUME CS:CODESTART:MOV AL,3EHPUSH AXMOV DL,ALMOV CL,4SHR DL,CL ;逻辑右移CMP DL,9JBE NEXT1 ;如果小于9ADD DL,7NEXT1:ADD DL,30H ;转化为对应的ascii码,显示数字MOV AH,2INT 21HPOP AXMOV DL,ALAND DL,0FH;将低位取出CMP DL,9JBE NEXT2 ;如果小于9ADD DL,7NEXT2:ADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START内容二编写一个程序,判别键盘上输入的字符;若是1—9字符,则显示之;若为A—Z或a—z字符,均显示“c”;若为回车字符<CR>(其ascii码为0DH),则结束程序,若为其他字符则不显示,继续等待新的字符输入。
DATA SEGMENTMESSAGE DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,1 ; 接收并回显INT 21HCMP AL,0DH ;如果输入的是回车键,退出JZ DONECMP AL,'0' ;判断是否在‘0~9’范围内JB NEXTCMP AL ,'9'JA CHARUPMOV DL,ALMOV AH,2 ;如果在‘0~9’范围内则输原样输出INT 21HLEA DX,MESSAGE ;换行MOV AH,9INT 21HJMP STARTCHARUP:CMP AL,41H ;与’A‘比较JB NEXTCMP AL,5AH ;与‘Z’比较JA CHRDNDISPC: ;显示‘C’MOV DL,'C'MOV AH,2INT 21HLEA DX,MESSAGE ;换行MOV AH,9INT 21HNEXT:JMP STARTCHRDN:CMP AL,61HJB NEXTCMP AL,7AHJA NEXTJMP DISPCDONE:MOV AH,4CHINT 21HCODE ENDSEND START补充实验统计不同成绩段学生的人数一、实验目的:1、掌握分支、循环、子程序调用、DOS功能调用等基本的程序结构。
(2020-2022)三年高考物理真题汇编(全国通用)专题16 实验(2)力学实验 Word版含解析
专题16 力学实验1、(2022·湖南卷·T11)小圆同学用橡皮筋、同种一元硬币、刻度尺、塑料袋、支架等,设计了如图(a)所示的实验装置,测量冰墩墩玩具的质量。
主要实验步骤如下:(1)查找资料,得知每枚硬币的质量为6.05g;(2)将硬币以5枚为一组逐次加入塑料袋,测量每次稳定后橡皮筋的长度l,记录数据如下表:序号 1 2 3 4 5硬币数量n/枚 5 10 15 20 25l10.51 12.02 13.54 15.05 16.56长度/cm(3)根据表中数据在图(b)上描点,绘制图线;______(4)取出全部硬币,把冰墩墩玩具放入塑料袋中,稳定后橡皮筋长度的示数如图(c)所示,此时橡皮筋的长度为______cm;(5)由上述数据计算得冰墩墩玩具的质量为______g(计算结果保留3位有效数字)。
【答案】①. 见解析②. 15.35 ③. 127【解析】(3)[1]根据表格标点连线如图(4)[2]由图可知刻度尺的分度值为1mm ,故读数15.35cm l =; (5)[3]设橡皮筋的劲度系数为k ,原长为x 0,则()110n mg k l x =- ()250n mg k l x =-设冰墩墩的质量为m 1,则有()10m g k l x =-联立各式代入数据可得142.69g m ≈。
2、(2022·广东卷·T11)某实验小组为测量小球从某一高度释放,与某种橡胶材料碰撞导致的机械能损失,设计了如图(a )所示的装置,实验过程如下:(1)让小球从某一高度由静止释放,与水平放置的橡胶材料碰撞后竖直反弹。
调节光电门位置,使小球从光电门正上方释放后,在下落和反弹过程中均可通过光电门。
(2)用螺旋测微器测量小球的直径,示数如图(b )所示,小球直径d =__________mm 。
(3)测量时,应__________(选填“A ”或“B ”,其中A 为“先释放小球,后接通数字计时器”,B 为“先接通数字计时器,后释放小球”)。
汇编语言实验二查找匹配字符串
汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH二、实验内容程序接收用户键入的一个关键字以及一个句子。
如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。
流程图N YY Y输入关键字结束关键字长度=0输入句子句子长度<关键字长度Y保存关键字长度到cx ,cx 入栈,保存总循环次数(句子长度-关键字长度+1)到al ,将句子的首地址放进bx(作为基址寄存器) si=di=0(变址寄存器)开始比较[bx+di]与[si]是否相等si+1,di+1,cx-1(同时指向下一个字符)YN bx+1(句子指向下一个字符) cx 出栈,再入栈,si,di 清零,al-1 cx 是否为0N 匹配完成,调用子程序输出al 是否为0 不匹配,输出三、设计和编码DATA SEGMENTmess1 DB'Enter keyword:','$'mess2 DB'Enter Sentence:','$'mess3 DB'Match at location:','$' mess4 DB'NOT MATCH.',13,10,'$' mess5 DB'H if the sentence',13,10,'$'change DB 13,10,'$'stoknin1 label bytemax1 db 10act1 db?stokn1 db 10 dup(?)stoknin2 label bytemax2 db 50act2 db?stokn2 db 50 dup(?)DATA ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENT;*************************************代码段main proc farassume cs:code,ds:data,es:dataSTART:push dssub AX,AXsub BX,BXsub DI,DIsub SI,SIpush AX ;为返回dos并清空后面要用到的寄存器MOV AX,DATAMOV DS,AXLEA DX,mess1MOV ah,09INT 21h ;输出Enter keywordLEA DX,stoknin1MOV ah,0ah ;用21号中段的0ah号功能获取关键字INT 21hcmp act1,0je exit ;如果为空直接退出程序a10:;********************************输入Sentence并判断LEA DX,changeMOV ah,09INT 21h ;输出回程,换行LEA DX,mess2MOV ah,09INT 21h ;输出Enter Sentence:LEA DX,stoknin2MOV ah,0ahINT 21h ;用21号中段的0ah号功能获取句子MOV AL,act1CBWMOV CX,AX ;保存关键字长度到cxPUSH CX ;cx入栈MOV AL,act2cmp AL,0je a50 ;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1js a50 ;若句子长度小于关键字长度,则跳转显示not match INC ALCBWLEA BX,stokn2 ;将句子的首地址放进BXMOV DI,0MOV SI,0a20:;****************************************比较,内循环MOV AH,[BX+DI]CMP AH,stokn1[SI] ;遇见字符不相等就跳转到a30jne a30INC DIINC SIDEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完CMP CX,0je a40jmp a20a30:;*****************************************外循环,BX+1,清空si,di继续内循环比较INC BXDEC ALcmp AL,0je a50MOV DI,0MOV SI,0POP CXpush CXjmp a20a40:;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出SUB BX,offset stokn2INC BXLEA DX,changeMOV ah,09INT 21hLEA DX,mess3MOV ah,09INT 21hCALL btohLEA DX,mess5MOV ah,09INT 21hjmp a10;****************************************二进制转换十六进制btoh PROC NEARMOV CH,4rotate: MOV CL,4ROL BX,CLMOV AL,BLand AL,0fhadd AL,30hcmp al,3ahjl printitadd al,7hprintit:MOV dl,alMOV ah,2int 21hdec chjnz rotateretbtoh endpa50:;*****************************************显示not matchLEA DX,changeMOV ah,09INT 21hLEA DX,mess4MOV ah,09INT 21hjmp a10exit:retmain endpCODE ENDSEND START 四、运行结果及分析五、实验小结六、附录(选)。
汇编语言实验2
汇编语⾔实验2⼀、实验⽬的1. 理解并掌握汇编源程序组成与结构2. 掌握汇编语⾔源程序编写→汇编→链接→调试的⼯具和⽅法3. 理解汇编源程序中地址表⽰、段寄存器的⽤法4. 理解和掌握寄存器间接寻址⽅式[bx]5. 通过汇编指令loop的使⽤理解编程语⾔中循环的本质⼆、实验准备1. 学习/复习第5章使⽤[bx]和loop实现循环的编程应⽤⽰例(教材5.5节,5.8节)2. 复习第3章「栈」的知识3. 结合第4章课件,复习完整汇编源程序编写→汇编→连接→运⾏→调试的⽅法4. 复习8086汇编中内存单元地址的表⽰,以及段寄存器DS, SS, ES, CS的⽤途三、实验内容1. 实验任务1 使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex1.asm。
源代码如下:1;ex1.asm2 assume cs:code3 code segment4mov ax, 0b810h5mov ds, ax6mov byte ptr ds:[0], 17mov byte ptr ds:[1], 18mov byte ptr ds:[2], 29mov byte ptr ds:[3], 210mov byte ptr ds:[4], 311mov byte ptr ds:[5], 312mov byte ptr ds:[6], 413mov byte ptr ds:[7], 414mov ah, 4ch15int 21h16 code ends17 end要求:使⽤8086汇编程序编写、汇编、链接、运⾏、调试⽅法,对ex1.asm进⾏汇编、链接、运⾏,使⽤debug⼯具调试可执⾏⽂件。
使⽤masm、link对ex1.asm进⾏汇编、链接,得到可执⾏⽂件ex1.exe,运⾏并观察结果使⽤debug⼯具对程序进⾏调试使⽤debug加载可执⾏⽂件ex1.exe后,使⽤d命令查看程序段前缀PSP所占的256个字节。
结合可执⾏⽂件中寄存器CX的值,使⽤u命令对ex1.exe进⾏精确反汇编使⽤g命令执⾏到程序退出执⾏之前(即源码⽂件中line16之前),观察结果2. 实验任务2使⽤任意⼀款⽂本编辑器,编写8086汇编源程序ex2.asm。
实验二、1简单并行接口
int 21h
mov ah,06 mov dl,0ffh int 21h jnz exit je start exit: mov ah,4ch int 21h code ends end 244程序流程图 ;若无,则转start ;返回DOS ;是否有键按下
八、实验结果
并行输出接口实验结果 并行输入接口实验结果
保存时输入自命名的源程序“XXX.ASM ”
为扩展名)
(“.ASM”
在“Alt+F”中,选择“EXIT ”退出文本编辑环境
3
图1
图2
使用汇编程序MASM.EXE (微软工具),对 源程序进行汇编,生成OBJ文件。 C:\> MASM (进入汇编环境) Source filename [.ASM]: xxx.asm
;返回DOS
code segment assume cs:code
start:
mov dx,2a0h
in al,dx mov dl,al mov ah,02
;从2A0输入一数据
;将所读数据保存在DL中 ;显示ASCII为DL的数据
int 21h
mov dl,0dh int 21h mov dl,0ah ;显示换行符 ;显示回车符
3
使用连接程序LINK.EXE (微软工具),对 OBJ文件进行连接。只有正确的OBJ文件,才能进 行连接操作。将OBJ文件与库函数或其他目标程序
进行连接成可执行的目标程序-EXE文件。
C:\> LINK (进入连接环境) Object Modules [.OBJ]: xxx.obj Run File [XXX.EXE]: List File [NUL.MAP]: Libraries [.LIB]: Warning: No STACK segment (忽略) There was 1 error detected. C:\> XXX.EXE (执行程序)
汇编语言程序设计2
目录系统认识 (1)实验一数码转换编程及程序调试 (5)实验二运算类编程实验 (11)实验三分支程序、循环程序设计实验 (16)实验四子程序设计实验 (22)实验五显示程序实验 (26)实验六串行通讯应用实验 (27)附录WMD86 联机软件使用说明 (40)系统认识一、实验目的掌握TD-PITE微机原理与接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
二、实验设备PC微机一台,TD-PITE实验装置一套。
三、实验内容编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。
四、实验步骤1. 运行Wmd86软件,进入Wmd86集成开发环境。
2. 根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1所示。
语言选择后,下次再启动软件,语言环境保持这次的修改不变。
在这里,我们选择汇编语言。
图13. 语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图2所示。
默认文件名为Wmd861。
图24. 编写实验程序,如图3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。
图3程序:SSTACK SEGMENT STACK ;定义堆栈段DW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: PUSH DSXOR AX, AXMOV DS, AXMOV SI, 3000H ;建立数据起始地址MOV CX, 16 ;循环次数AA1: MOV [SI], ALINC SI ;地址自加1INC AL ;数据自加1LOOP AA1AA2: JMP AA2CODE ENDSEND START5. 点击,编译文件,若程序编译无误,则输出如图4所示的输出信息,然后再点击进行链接,链接无误输出如图5所示的输出信息。
图4图56. 连接PC与实验系统的通讯电缆,打开实验系统电源。
(汇编语言实验)实验二算术运算类操作实验
实验二算术运算类操作实验姓名:***学号:**********班级:05211101专业:通信工程一、实验要求和目的1、了解汇编语言中的二进制、十六进制、十进制、BCD 码的表示形式;2、掌握各类运算类指令对各状态标志位的影响及测试方法;3、熟悉汇编语言二进制多字节加减法基本指令的使用方法;4、熟悉无符号数和有符号数乘法和除法指令的使用;5、掌握符号位扩展指令的使用。
6、掌握BCD 码调整指令的使用方法二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验思想本实验主要进行算术运算程序设计和调试,涉及到的知识点包括:1.加减法处理指令主要有加法指令ADD,带进位加法ADC,减法指令SUB,带进位减法指令SBB。
2.乘除法指令和符号位扩展指令主要有无符号数乘法指令MUL,带符号数乘法指令IMUL,无符号数除法指令DIV,带符号数除法指令IDIV,以及符号位从字节扩展到字的指令CBW 和从字扩展到双字的指令CWD。
3.BCD 码的调整指令主要有非压缩的BCD 码加法调整指令DAA,压缩的BCD 码减法调整指令DAS,非压缩的BCD 码加法调整指令AAA,非压缩的BCD 码减法调整指令AAS,乘法的非压缩BCD 码调整指令AAM,除法的非压缩BCD 码调整指令AAD。
8088/8086 指令系统提供了实现加、减、乘、除运算的上述基本指令,可对表1 所示的数据类型进行数据运算。
四、实验内容与步骤1、对于两组无符号数,087H 和034H,0C2H 和5FH,试编程求这两组数的和差积商,并考虑计算结果对标志寄存器中状态标志位的影响。
2、在数据段定义了两个多精度的有符号16 进制数,FIRST 和SECOND ,1)求两数的和与差,并将结果存放在THIRD 为首地址的缓冲区中;2)如果把两组数据当作十进制数据来处理,再次求两数的和与差,并将结果存放在FORTH 为首地址的缓冲区中。
汇编语言实验报告二
汇编语言实验报告)(实验二实验二)一.实验目的1.掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
2.熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
3.初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。
二.程序说明1.计算1+2+3+…+10,将结果显示在屏幕上。
2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。
编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
三.设计思想1、先将1-10循环求和,为了将结果显示在屏幕上,需要讲计算后保存在ax中的结果以十进制形式输出,可以将结果的两位数分别存于低位和高位中,即除以10取整和余al是商,ah是余数,后加上30h。
2、使用si寄存器,用于在存储器中寻址。
利用循环输入10个数字,将10个数比较,大的放在al,小的放在bl。
利用01号功能,输出。
四.程序代码程序一code segment main proc far assume cs:code start: push ds sub ax,ax push ax mov bx,0ah mov cx, 0ah sum1: add ax,bx dec bx loop sum1 printit: mov bl,10 div bl add al,30h mov ch,ah mov dl,al mov ah,2 int 21h add ch,30h mov dl,ch mov ah,2 int 21h ret main endp code ends end 程序二程序二data segment ;数据段定义开始数据段定义开始buf db 10 dup(?) ;数据定义及其存储空间数据定义及其存储空间 max db ? min db ? Str1 db 0DH,0AH,'Please input: ','$' ;定义Str1的内容的内容 Str2 db 0DH,0AH,'MAX:','$' ;定义Str2的内容的内容 Str3 db 0DH,0AH,'MIN:','$' ;定义Str3的内容的内容 data ends ;数据段定义结束数据段定义结束Stack segment stack ;堆栈段定义开始堆栈段定义开始db 10 dup(?) stack ends ;堆栈段定义结束堆栈段定义结束code segment ;代码段定义开始代码段定义开始main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,10 mov si,0 ;寄存器,用于寻址寄存器,用于寻址mov bx,0 lop1: lea dx,Str1 mov ah,09 int 21h mov ah,01h ; 输入输入int 21h mov buf[si],al inc si loop lop1 ;返回循环1 mov cx,9 mov si,0 mov al,buf[si] mov bl,al lop2: inc si mov dl,buf[si] cmp dl,al jl compare1 mov al,dl compare1: cmp bl,dl ;比较,小的数放在bl jl compare2 mov bl,dl compare2: loop lop2 mov max,al mov min,bl lea dx,Str2 mov ah,09 int 21h mov dl,max mov ah,02h int 21h ;输出最大数输出最大数lea dx,Str3 mov ah,09 int 21h mov dl,min mov ah,02h int 21h ;输出最小数输出最小数ret main endp code ends end start 五. 结果分析并回答: 1. 设计的程序包含了几个段设计的程序包含了几个段 2. 你的代码经过编译和连接之后,总共占用多少个字节你的代码经过编译和连接之后,总共占用多少个字节3. 调用DEBUG 进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?指令的地址码是多少?4. 对于第2题,怎样修改程序可以同时实现将10个数字的累加功能个数字的累加功能5.对于第2题,若要求输入的是两位数,又该怎么办?题,若要求输入的是两位数,又该怎么办? 程序一:运行结果运行结果1、本程序包含了一个段,即为代码段、本程序包含了一个段,即为代码段2、代码经过编译和连接之后,共占32个字节个字节3、第一条指令的地址码、第一条指令的地址码最后一条指令的地址码最后一条指令的地址码程序二运行结果运行结果1、本程序包含了数据段、堆栈段和代码段三个段。
汇编实验2
汇编实验2.1-2.4软件工程20091120183 李铮2.1数据传送指令的使用1.实验目的:负责把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存单元、I/O端口中读取数据。
可以分为下面几类:1. 通用传送指令:MOV,PUSH,POP,XCHG,XLA T2. 输入输出指令指令: IN,OUT3. 目的地址传送指令: LEA,LDS,LES4. 标志位传送指令: LAHF,SAHF,PUSHF,POPF2.实验步骤:1. 传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2.改变标志寄存器psw中tf标志的状态(0——1或1——0),其余位保持不变。
3. 设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下使用A 命令送入下面程序,并用单步T命令执行的方法,分析每条指令源地址的形成过程?当数据传送每完成一次,试分析AX寄存器中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]HLT4. 使用标志位传送指令,编程序段将标志位寄存器的低八位的值存入内存单元DS:1000H 中或堆栈中,然后将标志位寄存器的低八位置位为10101010。
2.2算术逻辑运算和移位指令的使用1.实验目的:使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算。
实验二 汇编语言程序上机过程及调试
实验报告二课程微机原理实验名称汇编语言程序上机过程以及调试第页专业电子信息班级__ __ 学号_ __ 姓名实验日期:2014 年 3 月10 日报告退发(订正、重做)一、实验目的学习汇编语言程序设计的基本步骤,即编辑(EDIT)程序、汇编(MASM)、连接(LINK)和运行,使对汇编语言程序设计有一个初步的认识。
二、实验内容1、学习使用全屏幕文本编辑软件EDIT。
用EDIT输入一段给定的源程序。
2、用MASM对已存盘的源程序进行汇编,形成目标文件(.OBJ);如有错误,再返回到EDIT进行修改。
3、用LINK对上述形成的目标文件进行连接,形成可执行文件(.EXE)4、在DOS提示符下运行该可执行文件。
[汇编语言程序的编写格式]汇编语言程序一般由几个段组成,它们分别是堆栈段,数据段,代码段。
任何一个源程序至少必须有一个代码段和一条作为源程序结束的伪指令END。
段的定义有两种格式,分述如下:1,完整的段定义格式:一个段由段头,段体,段尾组成,形式如下:段名SEGMENT[定位类型][组合类型][‘类别’]……段名ENDS其中SEGMENT后的参数一般可省略,详细说明参阅后面的有关章节。
2,简化的段定义格式(MASM5.0版本提供)每段以.开始后跟固定的段名,一般形式如下:DOSSEG.MODEL 存储类型;“存储类型”可选择为SMALL。
.STACK[大小];堆栈段,“大小”指定堆栈的字节数。
.DATA;数据段。
.CODE[名字];代码段;一般只有一个代码段,名字可缺少……例1:用完整的段定义编写一源程序。
NAME EXAM1;可以省略DATA SEGMENT;定义数据段,以下是数据段的内容STR1 DB “HELLO,WELCOME!”,13,10,‘$’STR2 DB “DO YOU LIKE COMPUTER?(Y/N)”,13 10,‘$’STR3 DB “NICE!”,13,10,‘$’STR4 DB “SORRY!”,13,10,‘$’STR5 DB “UNKNOW,ANSWER AGAIN!(Y/N)”,DB 13,10,‘$’STR6 DB “SEE YOU NEXT TIME!”,13,10,‘$’DA TA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE;DS:DATA;以下是代码段内容START:MOV AX,DA TA;给数据段寄存器赋值MOV DS,AXMOV AH,9;显示一字符串的功能号MOV DX,OFFSET STR1;显示字符串STR1的偏址INT 21H;DOS功能调用ASK :MOV DX,OFFFSET STR2;显示字符串STR2INT 21HMOV AH,1;键盘输入一字符的功能号INT 21H;键入的字符ASCⅡ码在ALNOT AL;求反TEST AL,‘Y’;是否按下‘Y’或‘y’键JE NEXT1TEST AL,‘y’JE NEXT1TEST AL,‘N’;是否按下‘N’键或‘y’键JE NEXT2TEST AL, ‘n’JE NEXT2MOV DX,OFFSET STR5;不是按上述键MOV AH,9INT 21HJMP ASK;再返回ASKNEXT1:MOV DX,OFFSET STR3;是按下‘Y’或‘y’键MOV AH,9INT 21HJMP BYENEXT2:MOV DX,OFFSET STR4;是按下‘N’或‘n’键MOV AH,9INT 21HBYE:MOV DX,OFFSET STR6INT 21HMOV DL,7;喇叭响的ASCⅡ码MOV AH,2INT 21HMOV AH,4CH;退回DOSINT 21HCODE ENDS;代码段结束END START;源程序结束注:源程序中的每一行注释语句前一定要加分号‘;’,下同。
汇编语言(第2版)王爽著-课后实验报告详解
汇编语言实验报告:班级学号 学生姓名 提交日期成 绩实验1-1如下:用E命令将指令写入内存:用A命令将指令写入内存:实验1-2代码如下:用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。
如图:实验1-3:用D命令输入内存fff0h~fffffh,则可看到:生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有:在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。
实验1-4代码如下:内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节实验2-1:(按实验结果填空)Mov ax,ffffMov ds,axMov ax,2200Mov ss,axMov sp,0100Mov ax,[0] ;ax=5BEAAdd ax,[2] ;ax=5CCAMov bx,[4] ;bx=30F0Add bx,[6] ;bx=6026Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026.Pop bx ;sp=0100; bx=.5CCAPush [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:实验2-2(分析问答实验)答:因为T命令是单步中断,我们在后面学习后知道,CPU执行中断时会保留现场,即将标志寄存器,CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,所以即便未对内存单元进行写入命令,但里面的值会因为CPU要保留现场自动被改了实验3(1)代码:ASSUME CS:CODES CODES SEGMENT START:mov ax,2000hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxMOV AH,4CHINT 21HCODES ENDSEND START (2)debug跟踪:(3)用debug跟踪查看PSP中的内容:可见PSP的头两个字节是CD 20,与书上的一致实验4-1代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,0mov ds,axmov bx,200hmov cx,64s: mov [bx],alinc alinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START实验4-1运行图如下:实验4-2代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,200hmov ds,axmov bx,0mov cx,64s: mov [bx],bxinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START运行结果同实验4-1的一样实验4-3(补全代码)ASSUME CS:CODESCODES SEGMENTSTART:mov ax,csmov ds,axmov ax,20hmov es,axmov bx,0mov cx,16hs: mov al,[bx]mov es:[bx],alinc bxloop sMOV AH,4CHINT 21HCODES ENDSEND START因为要将代码复制到0:200处,则必须知道代码的地址,和代码的长度,代码的地址在cs和IP中,代码的长度可以编译后用U命令查看后确定,这个之前随便打一个数就可以,不影响代码的长度,因为那个数占的空间和真实的长度一样,所以用U命令后在改过来即可实验4-3的运行图如下:实验5-1代码如下:DA TAS SEGMENTdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hDA TAS ENDSSTACKS SEGMENTdw 0,0,0,0,0,0,0,0STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TAS,SS:STACKSSTART:MOV AX,stacksMOV ss,AXmov sp,16mov ax,datasmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]MOV AH,4CHINT 21HCODES ENDSEND START实验5-1运行图如下:①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图②CPU执行程序后,程序返回前,CS=144Ch,SS=144Bh,DS=144Ah。
实验2:用户登陆验证程序的设计
( 2018 / 2019 学年 第 1学期)
课程名称
微型计算机原理与接口技术
实验名称
实验2:用户登陆验证程序的设计
实验时间
2018
年
10
月
25
日
指导单位
通信工程学院
指导教师
祁正华
学生姓名
杨单妮
班级学号
17120205
学院(系)
通信工程学院
专业
通信工程
实验报告
实验名称
用户登陆验证程序的设计
指导教师
祁正华
实验类型
软件
实验学时
2+2
实验时间
2018.10.25
一、实验目的和要求
学习串操作指令的应用、BIOS功能调用与DOS功能调用。
二、实验环境(实验设备)
PC系列机,汇编语言开发工具TASM5.0
三、实验原理及内容
用户登录验证程序的实现。程序执行后,给出操作提示,请用户输入用户名和密码;用户在输入密码时,程序不回显输入字符;只有当用户输入的用户名、密码字符串和程序内定的字符串相同时才显示欢迎界面,并返回DOS界面。颜色自定(彩色或黑白)。
MM EQU $-BUF2
BUF4 DB 15 DUP(?)
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:MOV AX,TA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG1
INT 21H
MOV AH,0AH
MOV DX,OFFSET BUF3
CMP [SI],AL
JNZ ERROR
bomb lab phase2理解
一、概述bomb lab phase2是计算机科学领域中一个非常重要的实验,通过对这个实验的深入研究和理解,可以对计算机系统的安全性和漏洞有更深刻的认识,从而为计算机安全领域的研究和应用提供重要的参考价值。
二、bomb lab phase2的背景1. bomb lab phase2是由某大学计算机科学系设计的一个实验项目,旨在通过完成一系列程序设计和分析的任务,来加深学生对计算机系统基本原理的理解和应用。
2. 该实验要求学生能够熟练掌握汇编语言、内存管理、逆向工程等相关知识,并能够在实践中运用这些知识解决实际问题。
三、bomb lab phase2的内容和要求1. 实验要求学生通过分析给定的程序代码和二进制文件,找出并修复其中的错误,使程序能够正确运行并输出目标字符串。
2. 学生需要在完成实验的过程中,深入理解程序执行的过程、内存的分配和管理、汇编指令的执行过程等内容,从而能够找出程序中的逻辑漏洞、缓冲区溢出、内存泄漏等问题,并加以解决。
3. 实验要求学生能够写出详细的分析报告,说明每一步的分析和修复过程,逻辑推理和数据验证的过程等。
四、bomb lab phase2的重要性和意义1. bomb lab phase2的完成能够对学生深入理解计算机系统和程序设计原理有很大的帮助,能够提高他们的动手能力和逻辑思维能力。
2. 通过对这个实验的理解和研究,能够为计算机系统的安全性和稳定性提供一定的参考,有助于发现和修复潜在的安全漏洞和问题。
3. 完成这个实验还能够培养学生的团队合作精神和问题解决能力,这是他们未来在计算机领域就业和研究中必不可少的能力。
五、总结bomb lab phase2是一个非常重要的实验项目,通过学生对这个实验的深入理解和研究,有助于提高他们的动手能力、逻辑思维能力和问题解决能力,对计算机系统的安全性和稳定性也有着一定的参考价值。
希望广大学生能够认真对待这个实验,努力完成并深刻理解其中的知识和技能。
汇编实验报告
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二循环与子程序程序设计一、实验目的1) 加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5) 掌握子程序设计、编制及调试。
6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
2)将从3000H内存单元开始的100个字节存储单元全部清0。
3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。
6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。
三、实验设备PC机一台四、实验步骤1) 按程序流程图编制实验程序。
2) 输入源程序。
3) 汇编、连接程序,执行程序,检查结果。
4)对内存单元3000H开始的100个存储单元用E命令输入任意数。
5) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。
6) 用D命令检查执行结果。
五、实验报告的要求1)列出源程序。
2)对程序中用到的寄存器说明其功能。
3)总结计数控制循环程序的设计方法。
4) 说明怎样使用DEBUG进行程序调试的。
调试过程中所遇到的问题是如何解决的。
实验2-1源程序:DATA SEGMENTBUF DB '1+2*3+3*4+4*5+...+N(N+1)=$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,01HMOV BX,01HL1:INC BXMOV AX,BXINC AXMUL BL;(进行乘法运算,bl作为乘数)ADD DX,AX;(DX作为累加变量)CMP AX,200;N(N+1)是否大于200JBE L1MOV BX,DXLEA DX,BUFMOV AH,09HINT 21H;输出字符串MOV CX,4LOP:MOV AX,4MOV DX,BXMUL CLSUB AX,4MOV AH,ALMOV AL,CLMOV CL,AH;SHR DX,CL;cl作为移位位数寄存器AND DX,0FHCMP DX,0AHJBE L2ADD DX,7HL2:ADD DX,30HMOV CL,AL;MOV AH,02HINT 21HLOOP LOP;输出数据MOV AH,4CHINT 21HCODE ENDSEND START运行结果:实验2-2源程序:stack1 segment para stackdw 20h dup(0)stack1 endscode segmentassume cs:code,ss:stack1 start:mov ax,300hmov ds,axmov cx,100;cx作为循环变量lop:mov bx,cx ;bx作为地址偏移mov al,0h ;al为0,目的是清零mov -1[bx],alloop lopmov ah,4chint 21hcode endsend start运行结果:实验2-3源程序:data segmentBUF DB 09H,09Hdata endsstack1 segment para stackdw 20h dup(0)stack1 endsCODE SEGMENTassume cs:code,ds:data,ss:stack1,es:data START:MOV AX,DATAMOV DS,AXAND CX,0000HMOV CL,09H;;cl作为循环变量L1:MOV BUF,CLMOV CL,09HL2:MOV BUF+1,CLMOV AL,10SUB AL,BUFMOV DL,ALOR DL,30HMOV AH,02HINT 21HMOV DL,'*'MOV AH,02HINT 21HMOV BL,10SUB BL,BUF+1MOV DL,BLOR DL,30HINT 21HMOV DL,'='INT 21H;会运行一段小程序,使AX的值改变AND AX,0000HMOV AL,10SUB AL,BUFMOV DL,ALMUL BLMOV BL,10DIV BLMOV DL,ALMOV DH,AHOR DL,30HMOV AH,02HINT 21HMOV DL,DHOR DL,30HMOV AH,02HINT 21HMOV DL,' 'INT 21HMOV CL,BUF+1LOOP L2INT 21HMOV CL,BUFLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START运行结果:实验2-4源程序:data segmentM DB 20HLS DB 00HLP DB 00Hdata endsstack1 segment para stack dw 20h dup(0)stack1 endsCODE SEGMENTassume cs:code,ds:data,ss:stack1,es:data START:MOV AX,DATAMOV DS,AXMOV AL,03HMOV AH,00HINT 10HMOV CX,5L1:MOV LP,CLMOV BX,6HSUB BX,CXMOV LS,BLMOV BH,00HMOV DH,LSMOV AL,MAND AH,00HSUB AL,LSMOV DL,ALMOV AH,02HINT 10HMOV AL,LSAND AH,00HMOV BX,2MOV AL,LSMUL BLSUB AL,1MOV LS,ALMOV AH,9HMOV AL,'*'MOV BH,0MOV BL,0DHMOV CL,LSAND CH,00HINT 10HMOV CL,LPAND CH,00HLOOP L1MOV AH,4CHINT 21H CODE ENDS END START运行结果:实验2-5源程序:STACK SEGMENT STACK DW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK START:MOV AH,01HINT 21HAND BX,0000HSUB AL,30HMOV BL,ALMOV AH,01HINT 21HSUB AL,30HAND CX,0000HMOV CL,ALMOV AX,01HAND DX,0000HCALL MPUSH AXMOV BX,DXCALL SHOWPOP AXMOV BX,AXCALL SHOWMOV AH,4CHINT 21HM PROCSUB CX,1HJBE LCALL ML:PUSH DXMUL BXMOV CX,AXPOP AXPUSH DXMUL BXPOP DXADD DX,AXMOV AX,CXRETM ENDP SHOW PROCMOV CX,4L2:PUSH CXMOV CL,4ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,0AHJB L3ADD DL,07H L3:ADD DL,30HMOV AH,02HINT 21HPOP CXLOOP L2RETSHOW ENDP CODE ENDSEND START运行结果:实验2-6源程序:STACK SEGMENT STACK DW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK START:MOV AH,01HINT 21HAND BX,0000HSUB AL,30HMOV BL,ALMOV AH,01HINT 21HSUB AL,30HAND CX,0000HMOV CL,ALMOV AX,01HAND DX,0000HCALL MPUSH AXMOV BX,DXCALL SHOWPOP AXMOV BX,AXMOV AH,4CHINT 21HM PROCSUB CX,1HJBE LCALL ML:PUSH DXMUL BXMOV CX,AXPOP AXPUSH DXMUL BXPOP DXADD DX,AXMOV AX,CXRETM ENDP SHOW PROCMOV CX,4L2:PUSH CXMOV CL,4ROL BX,CLMOV DL,BLCMP DL,0AHJB L3ADD DL,07H L3:ADD DL,30HMOV AH,02HINT 21HPOP CXLOOP L2RETSHOW ENDP CODE ENDSEND START运行结果:。