汇编实验(分支程序)
汇编语言与微机原理实验-分支程序设计实验
实验二分支程序设计实验姓名:学号:实验日期:一实验目的1、掌握分支程序的设计方法。
2、掌握宏定义及宏调用的基本方法。
3、了解小写和大写字母的ASCII码表示及其转换方法。
了解数字及其它字符在的ASCII码表示方法。
4、进一步掌握调试工具的使用方法二实验内容从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。
若输入为小写字母,显示“You Input a Lowercase Letter!”;若输入为大写字母,显示“You Input a Uppercase Letter!”;若输入为数字,显示“You Input a Digit!”;若输入为其它字符,显示“You Input Other Letter!”。
1、编程指导数字0~9的ASCII码为30H~39H;大写字母的ASCII码为41H~5AH,小写字母的ASCII 码为61H~7AH。
本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。
字符串显示使用功能号为09H的DOS 功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。
2、流程图及程序框图(一):程序流程图(二)程序框架:DATA SEGMENTINFOR1 DB 0AH,0DH,"Please Press Any Key to input a letter:$"INFOR2 DB 0AH,0DH,"You Input a Lowercase Letter!$"INFOR3 DB 0AH,0DH,"You Input a Uppercase Letter!$"INFOR4 DB 0AH,0DH,"You Input a Digit!$"INFOR5 DB 0AH,0DH,"You Input Other Letter!$"DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:M OV AX,DATAMOV DS,AXMOV AH,09MOV DX,OFFSET INFOR1INT 21HMOV AH,09HCMP AL,'0'JB OTHERCMP AL,'9'JBE DIGITCMP AL,'A'JB OTHERCMP AL,'Z'JBE UPPERCMP AL,'a'JB OTHERCMP AL,'z'JBE LOWERJMP PENDLOWER:MOV AH,09HMOV DX,OFFSET INFOR2INT 21HJMP PENDUPPER:MOV AH,09HMOV DX,OFFSET INFOR3INT 21HJMP PENDDIGIT:MOV AH,09HMOV DX,OFFSET INFOR4INT 21HJMP PENDOTHER:MOV AH,09HMOV DX,OFFSET INFOR5INT 21HPEND:MOV AH,4CHINT 21HCODE ENDSEND START三实验习题选做题一:在屏幕上显示信息“Are you really want to exit?”,然后从键盘输入一个字符,若输入“Y”或“y”,显示“Thank you for your using!”后程序结束;若输入“N”或“n”,显示“Let’s continue!”后程序结束;若输入其它字符,显示“You press an error key!”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。
汇编实验三--分支循环程序设计
福建农林大学金山学院实验报告系:专业:计算机科学与技术年级: 08 姓名:学号:实验课程:汇编语言实验室号:_______ 实验设备号:实验时间:指导教师签字:成绩:实验三分支循环程序设计1.实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。
2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1.有10个数,统计正数的个数,存放在变量M中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。
(AL寄存器中存放正数的个数)DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 10MOV AL, 0LEA SI, MSGL1: MOV BL, [SI]CMP BL, 0JBE NEXTINC ALNEXT: INC SILOOP L1MOV M, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START2.数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEG SEGMENTMSG DB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 4MOV AL, MSGMOV SI, OFFSET MSG+1L1: CMP AL, [SI]JB NEXTMOV AL, [SI]NEXT: LOOP L1MOV M, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START3.编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
汇编语言程序设计实验报告二(分支循环程序实验)
汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
微机原理汇编实验-分支、循环及子程序设计实验
微机原理汇编实验-分支、循环及子程序设计实验学生实验报告实验课程名称:微机原理汇编实验开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称分支、循环及子程序设计实验指导教师教师评语一、实验目的1.学习分支程序、循环结构程序的设计和调试方法。
2.学习子程序的定义和调试方法。
3.掌握分支、循环、子程序等程序的基本结构。
二、实验原理使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试,以便掌握汇编语言设计、编写、调试和运行程序的方法。
三、实验仪器、材料1.软件MASM5.02.PC微机一台四、实验步骤1.输入程序并检查无误,经汇编、连接后生成.EXE文件。
2.使用DEBUG命令运行以上程序。
3.反复试几组数,考察程序的正确性。
五、实验源代码;-------------------------------------------------;程序名:Lab201;功能:实现对NUM中 -128~127; 的数进行负数统计;备注:负数的个数存放在BL中并在屏幕输出;-------------------------------------------------DSEG SEGMENT;定义需要统计的各个数值,数据值不能大于127,不能小于-128 NUM DB -100,-100,1,-100,30,-10,127,89,-128,20;统计数据的个数LENG EQU ($-NUM)DSEG ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV CX,LENGMOV BX,0000HMOV AX,DSEGMOV DS,AXMOV SI,OFFSET NUMAGAIN:MOV DL,[SI]CMP DL,0000HJL LITTELJMP BIGLITTEL:INC BL ;程序结束返回DOSADD SI,1LOOP AGAINJMP FINISHBIG:ADD SI,1LOOP AGAINJMP FINISH;---------------------------------- ;子程序名:TRANNUM;功能:将数值转换为数字; 字符输出;入口参数:DL;出口参数:无;---------------------------------- TRANNUM PROC NEARMOV AL,DLXOR AH,AHMOV CX,2MOV DL,10TRAN1:DIV DLXCHG AH,ALADD AL,'0'PUSH AXXCHG AH,ALMOV AH,0LOOP TRAN1MOV CX,2TRAN2:POP DXCALL DISPLAYLOOP TRAN2RETTRANNUM ENDP;----------------------------------;子程序名:DISPLAY;功能:将单个字符显示输出;入口参数:DL;出口参数:无;----------------------------------DISPLAY PROC NEARMOV AH,02HINT 21HRETDISPLAY ENDPFINISH:MOV DL,BLCALL TRANNUM ;调用子程序:TRANNUM MOV AH,4CH ;程序结束返回DOSINT 21HMAIN ENDPCODE ENDSEND START六、实验过程原始记录(数据图表、计算等)1、打开命令提示符:输入cmd2、输入:cd G:/asm/tos3、输入:G:5、输入:masm lab2016、输入:link lab2017、输入:lab201七、实验结果分析从程序代码分析,所给数值中有5个负数,运行程序后输出结果为05,说明程序能够实现其统计负数个数的功能。
汇编语言分支结构实验报告
1)输入源程序:
data segment
dis0 db 'input digit0 !$'
exit:mov ah,4ch
int 21h
code ends
end start
3.编制程序,判断键盘输入的一个数,若输入1~5,则将该数转换为二进制数存放至RLT单元,若输入其它数则显示输出“ERROR”。
答:
data segment
rlt db dup(5)
dis db'error!$'
data ends
jmp short p1
jmp short p2
jmp short p3
jmp short p4
jmp short p5
jmp short p6
jmp short p7
jmp short p8
jmp short p9
jmp short p10
p0:lea dx,dis0
mov ah,9
int 21h
int 21h
code ends
end start
2.如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数符号,当两数符号不相同时,其结果的最高位必定为1;当两数符号相同时,其结果的最高位必定为0;再根据其中一数的符号是正还是负决定两数是正数还是负数。请做程序完成。
汇编语言--分支结构程序设计实验
汇编语言--分支结构程序设计实验汇编语言实验报告实验6 汇编语言分支结构程序设计学院:计算机学院班级:姓名:梁建辉学号: [1**********]72019年12月1日1. 实验目的:(1)(2)(3)(4)掌握汇编语言顺序结构设计方法熟悉常用汇编指令的用法学会用debug输入、运行小程序,并检查运行情况的方法学会在pc机上建立、汇编、连接、调试和运行80x86汇编语言程序的过程2. 实验内容:(1)调试程序1:将存储单元DAT+1中的两个压缩的bcd码拆成2个非压缩的不承担码(高位bcd码放在DAT+1单元,地位bcd码放在DAT+2单元)。
程序如下:DATA SEGMENTDAT DB 0A5H,2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AL, DATMOV BL, ALMOV CL, 4SHL BL, CLMOV DAT+1, BLAND AL, 0FHMOV DAT+2, ALMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
3.实验运行结果:(1)1401:0000 B80014 MOV1401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 8AD8 MOV BL,AL1401:000A B104 MOV CL,041401:000C D2E3 SHL BL,CL1401:000E 881E0100 MOV [0001],BL1401:0012 240F AND AL,0F1401:0014 A20200 MOV [0002],AL1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027段首地址为:1400运行前的结果:-d 1400:0,F1400:0000................运行后的结果:-gProgram terminated normally-d 1400:0,f1400:0000.P..............单步运行结果:BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13F0 ES=13F0 SS=1400 CS=1401 IP=0003 NV UP EI PL NZ NA PO NC 1401:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=A5 -tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV BL,AL-tAX=14A5 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV CL,04-tAX=14A5 BX=00A5 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCSHL BL,CL-AX=14A5 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NCMOV [0001],BLDS:0001=50 -tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NC 1401:0012 240F AND AL,0F-tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NCMOV [0002],ALDS:0002=05 -tAX=1405 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC MOV AH,4C-AX=4C05 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000SS=1400 CS=1401 NV UP EI PL NZ NA PE NC INT 21程序2:DATAX Y SEGMENT DB 20H DW ?ENDSSEGMENTMOV AX,DATA;把X的值转移到AL ;清零AH ;定义X为字类型并赋值20H ;定义Y为字节类型 DATA CODESTART: ASSUME CS:CODE,DS:DATA MOV MOV DS,AX AL,X XOR AH,AH SHL AX,1 MOV MOV ;将目的操作数向左移动1位 ;移位大于1,需用CL ;将目的操作数向左移动2位 ;把AX与BX中的值相加 ;返回DOS状态下 BX,AX CL,2 SHL AX,CL ADD AX,BX MOV MOV Y,AX AH,4CH INT 21H ENDS END START CODE运行结果:1401:0000 B80014 MOV AX,14001401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 32E4 XOR AH,AH1401:000A D1E0 SHL AX,11401:000C 8BD8 MOV BX,AX1401:000E B102 MOV CL,021401:0010 D3E0 SHL AX,CL1401:0012 03C3 ADD AX,BX1401:0014 A30100 MOV [0001],AX1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027-首地址:1400运行前结果:-d 1400:0,f1400:0000...............-t运行后结果:Program terminated normally-d 1400:0,f1400:0000@..............单步调试:-tAX=-tAX=-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000] DS:0000=20BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8MOV DS,AX-tAX=13FB BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=13FB CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-g程序3:DATA SEGMENTORG 1000HBIN DB ?HEX DB 6BhORG 1030HDB 00H, 01H,02H,03H,04H,05H,06H,07H,08H,09H ORG 1040HDB 0AH,0BH,0CH,0DH,0EH,0FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,HEXMOV BX,OFFSET BINSUB AH,AHADD BX,AXMOV DL,[BX]MOV CL,4SHL DL,CLMOV AL,HEX+1MOV BX,OFFSET BINXOR AH,AHADD BX,AXMOV Ax,BXOR Al,DLMOV BIN,ALMOV AH,4CHINT 21HCODE ENDSEND START运行结果:1505:0000 B80014 MOV1505:0003 8ED8 MOV DS,AX1505:0005 A00110 MOV AL,[1001] 1505:0008 BB0010 MOV BX,1000 1505:000B 2AE4 SUB AH,AH1505:000D 03D8 ADD BX,AX1505:000F 8A17 MOV DL,[BX]1505:0011 B104 MOV CL,041505:0013 D2E2 SHL DL,CL1505:0015 A00210 MOV AL,[1002] 1505:0018 BB0010 MOV BX,1000 1505:001B 32E4 XOR AH,AH1505:001D 03D8 ADD BX,AX1505:001F 8BC3 MOV AX,BX首地址:1400-运行前结果:-d 1400:0,f1400:0000.....................-运行后结果:-d 1400:0,f1400:0000...........单步调试:BX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13F0 ES=13F0 SS=1400 CS=1505 IP=0003 NV UP EI PL NZ NA PO NC 1505:0003 8ED8 MOV DS,AX-TAX=1400 BX=0000 CX=107A DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AL,[1001]DS:1001=6B-TBX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCMOV BX,1000-TAX=146BCX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCSUB AH,AH-TBX=1000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NC ADD BX,AX-AX=006B CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV DL,[BX]DS:106B=32-tAX=006B BX=106B CX=107A SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOVCL,04-tAX=006B BX=106B CX=1004 DX=0032 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCSHLDL,CL-tAX=006B BX=106B CX=1004 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOV AL,[1002]DS:1002=00-tBX=106B CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOVBX,1000-AX=0000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CYXORAH,AH-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NCADD BX,AX-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PE NCMOV AX,BX-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PE NCOR AL,DL-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV [1000],ALDS:1000=20--tAX=1020 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AH,4C-心得体会:写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。
汇编实验四分支和循环程序设计实验(设计性实验)
汇编实验四分支和循环程序设计实验(设计性实验)汇编语言实验报告实验四分支和循环程序设计实验(设计性实验)班级:姓名:学号:实验日期:实验四分支和循环程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言分支程序基本指令的使用方法;3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法;4.了解汇编语言循环程序设计的基本流程;5.熟悉汇编语言循环基本指令的使用方法;6.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识在实际应用中,经常根据一些条件来选择一条分支执行。
汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号相减而导致的结果来进行。
1.无条件转移指令JMP无条件转移指令JMP 是使程序无条件转移至目标处,又分为段内转移、段间转移。
2.条件转移指令JXX条件转移指令可分为三大类:1).简单条件转移指令指令。
根据单个标志位的状态判断转移条件。
标志位指令转移条件意义CF JC CF=0 有进位/借位JNC CF=1 无进位/借位ZF JE/JZ ZF=1 相等/等于0JNE/JNZ ZF=0 不相等/不等于0 SF JS SF=1 是负数JNS SF=0 是正数OF JO OF=1 有溢出JNO OF=0 无溢出PF JP/JPE PF=1 有偶数个1JNP/JPO PF=0 有奇数个12).无符号数条件转移指令。
假设在条件转移指令前使用比较指令,比较两个无符号数A,B,指令进行的的操作是A-B,其转移指令如下:指令转移条件意义JA/JNBE CF=0 AND ZF=0 A>BJAE/JNB CF=0 OR ZF=1 A>=BJB/JNAE CF=1 AND ZF=0 A<b< p="">JBE/JNA CF=1 OR ZF=1 A<=B3).带符号数条件转移指令。
实验三 分支程序设计
实验三 分支程序设计一、实验目的1) 掌握汇编语言程序开发的过程;2) 熟悉调试程序DEBUG 的用法;3) 掌握汇编语言的编写与调试过程。
二、实验内容根据某数X 的值,给Y 进行赋值。
⎪⎩⎪⎨⎧<-=>=0,10,00,1x x x y ,调试程序后,使用DEBUG中指令检查结果的正确性。
三、编程提示查平方表:data segment ;数据段的定义,段名为datax db 12hy db ?data endsstack segment stack 'stack' ;堆栈段的定义,段名为stackdb 16 dup('stack')stack endscode segment ;指令段的定义,段名为codeassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax(此处自己编写)mov ah,4chint 21hcode endsend start四、实验步骤:(1)进入汇编环境,输入上述程序段;点击file-save 保存文件,文件名后缀为.asm;(2)点击file-exit 退出至DOS 界面,输入指令:--masm 文件名.asm; (编译文件,生成目标文件.obj)--link 文件名.obj; (链接文件,生成可执行文件.exe)--debug 文件名.exe (调试程序,查看结果)使用的Debug 指令有:u(反汇编,查看程序指令、指令机器码及所存放位置) 注意:找出所写程序的起止位置,并记下:g (程序执行指令,格式一般为:g=起始地址 终止地址)d (内存查看指令,格式一般为:d 内存地址 L 字节数)e (内存修改指令,格式一般为:e 内存地址 回车,之后显示此地址单元内容,在光标所指示位置输入修改后内容即可)另外用于单步执行的指令:t ;退出指令q五:实验要求:(1) 编写完整程序;(2) 任意修改X 的值,使用DEBUG 中指令调试并查看结果的正确性;(3) 扩展,任意两数进行比较,并赋结果给Y 。
汇编实验4-分支程序设计
汇编实验四分支程序
实验目的:
掌握汇编语言分支程序上机调试过程。
实验内容:
比较两个无符号数大小,将大数存入MAX单元操作步骤:
1.输入源程序: EDIT d:\hb\ex5.asm
2.汇编源程序:masm ex5.asm(具体步骤略)
3.连接目标程序:link ex5.obj(具体步骤略)
4.用DEBUG调试并查看运行结果
DEBUG ex5.EXE
1先用U命令进行反汇编,看到源程序在内存中的存储
2 T (单步执行一条指令。
)
3 T (单步执行一条指令。
)
4 D DS:0 用D命令观看数据段的内容
数据段中第一个单元内容为95H(x1),第二个单元内容为64H(x2),第三个单元用于存放较大的无符号数,(比较前看到的内容为00H)
5 T (单步执行一条指令。
)
6 T (单步执行一条指令。
)
7 T (单步执行一条指令。
)
此时由于x1>x2,所以直接转到mov max,al语句
8 T (单步执行一条指令。
)
9 D DS:0 用D命令观看数据段的内容
第三个单元用于存放较大的无符号数95H,运行正确
10Q 退出调试
思考题:
若将程序中的x1,x2看成带符号数,应修改哪条语句?最后结果为什么?。
汇编语言实验四+分支程序设计
实验四分支程序设计实验类型:验证性实验目的:1、掌握分支程序的设计方法2、掌握分支程序的控制方法。
实验步骤:1、进入DOS环境2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用3、启动EDIT编辑器输入程序代码4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)5、运行命令MASM CHEN.ASM生成OBJ文件6、如果出错请回到第3步再纠正错误7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)9、执行反汇编U10、查看程序结束地址11、运行G 命令运行程序12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。
实验内容:编写程序统计某个班20个学生成绩:90-100,80-89,70-79,60-69,0-59各个分数段人数个数。
代码:data segmentscore db 56,69,84,82,73,88,99,63,100,80 s db 5 dup(?)data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov si,-1mov cx,10mov bx,0mov dx,1next:inc sicmp score[si],60jl next1cmp score[si],70jl next2cmp score[si],80jl next3cmp score[si],90jl next4add s[bx+4],dljmp next5next1: add s[bx],dljmp next5next2: add s[bx+1],dljmp next5next3: add s[bx+2],dl jmp next5next4: add s[bx+3],dl next5:loop nextretcode endsend start。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,
8086-汇编语言分支程序设计
汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AH,2INT 21H ;显示高位ASCII 码MOV DL,BLAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2: ADD DL,30HMOV AH,2INT 21H ;显示低位ASCII 码MOV AH,4CHINT 21HCODE ENDS ;返回DOSEND START使用相应的文本编辑器建立文件three.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm three;2>.连接:C:\masm> link three;3.运行及调试:1>. 运行:C:\masm>debug three.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 XX ;运行程序至断点XX 处-R ;查看程序运行结果以上命令执行的细节可参照实验二中的说明。
4.调试:修改AL 的内容,判断此程序是否能正确显示其中的内容的方法。
例:修改AL 内容为9AH:-L ;重新加载可执行文件-A0 ;重新修改MOV AL,3EH 指令361E:0000 MOV AL,9A361E:0002-G=0 xx;带断点运行-R ;查看程序运行结果实验二:编写一个数据区移动程序,要考虑源数据区与目的数据区有重叠的情况。
1.源程序如下所示,编辑下面的源程序到文件lab.asm 中:使用相应的文本编辑器建立文件lab.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm lab;2>.连接:C:\masm> link lab;。
实验二 结构化汇编程序设计(分支和循环程序)实验报告
沈阳工程学院学生实验报告实验室名称:微机原理实验室实验课程名称:实验项目名称:结构化程序设计实验实验日期:20 年月日班级:姓名:学号:指导教师:批阅教师:成绩:一.实验目的1.学习条件转移类指令以及分支程序设计方法。
2.学习循环控制类指令以及循环程序设计方法。
3.熟练掌握Wmd86调试软件的使用及程序运行、调试方法。
二.实验设备PC机一台,TD-PITE微机原理实验教学系统一台。
三.实验内容程序1:根据X的范围求Y的值,当X<5时,Y= —X;当X>=5且X<10时,Y=X+5;当X>=10时,Y=X+20。
假设X、Y均为带符号数。
请将程序代码补充完整。
DA TA SEGMENTX DB 17Y DB ?( )CODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DATA( )MOV AL,X( )JGE GE5NEG AL( )GE5: CMP AL,10JGE GE10( )JMP EXITGE10:ADD AL,20EXIT:MOV Y,ALHLT ; (接右侧)CODE ENDSEND START程序2:有一组字节类型数据DATA,数据个数在COUNT中。
编程求出DATA中正数、负数及零的个数,将结果分别保存在D1、D2、D3中。
请将程序代码补充完整。
MYDATA SEGMENTDATA DB -1,15,-58,4,-7,0,0,9,-12,45,5COUNT EQU $-DA TAD1 DB 0 ;存放正数个数D2 DB 0 ;存放负数个数D3 DB 0 ;存放0的个数MYDATA ENDSMYCODE SEGMENTASSUME CS:MYCODE,DS:MYDA TASTART:MOV AX, MYDATAMOV DS, AX( )MOV CX, COUNTXOR BL, BL ;存放正数个数XOR BH, BH ;存放负数个数( );存放0的个数NEXT: MOV AL, [SI]CMP AL, 0 ; (接下页)结构化程序设计实验JG ZHENGJL FUINC DLJMP GOON ZHENG: ( )JMP GOONFU: INC BHGOON: INC SI ; (接右侧)LOOP NEXT( )MOV D2,BHMOV D3,DLHLTMYCODE ENDS( )四.实验步骤1.运行Wmd86调试软件,先建立( ),然后编写实验程序1,经( )、链接无误后,进入调试状态。
汇编语言实验报告(分支)
《汇编语言程序设计》实验报告
实验名分支结构程序设计实验室实验楼403实验日期2013/06/03
1、实验目的及要求
1.学习调试程序,查找逻辑错误;
2.学习分支语句的编程和调试;
3.学习循环语句的编程和调试。
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows 7
链接程序:LINK.EXE
调试环境:DOSBOX0.74虚拟平台。
3、实验内容
定义10个数据,分别为“3, 0, -1, 45, 2, -7, 10, 8, -9,-1”。统计其中正数的个数,并把结果存放在内存变量M中。
四、实验过程:
5、源程序清单
程序源代码如下:
DSEGSEGMENT
MSGDB 3, 0, -1, 45, 2, -7, 10, 8, -9, -1
MDB ?
DSEGENDS
CSEGSEGMENT
ASSUMECS: CSEG, DS: DSEG
START:MOVAX, DSEG
MOVDS, AX
MOVCX, 10
MOVAL, 0
LEASI, MSG
L1:MOVBL, [SI]
CMPBL, 0
JBENEXT
INCAL
NEXT:INCSI
LOOPL1
MOVM, AL
MOVAL, 0
MOVAH, 4CH
INT21H
CSEGENDS
ENDSTART
6、实验体会
本次实验相对于之前的所有程序,是最顺利的一次,完成时间也最快,其中一个原因是上次实验所积累的Байду номын сангаас心和有用的、有效的经验。通过本次实验,我掌握了分支语句的编程和调试过程,同时也巩固了学习循环语句的编程和调试过程,更一步地增长了信心和增强了理论知识。
汇编实验报告--分支程序设计实验
实验四分支程序设计实验学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握分支程序的设计方法;2.掌握利用DEBUG修改参数、检查结果的方法;3.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二、实验内容p181,例5.10把x的绝对值赋给y,x为一个四字节有符号数。
三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求1.画出两个程序的流程图,若要独立编写程序,应列出相应的程序清单。
2.说明本实验是如何利用DEBUG进行调试的。
五、主要实验步骤跳跃表法可以使程序根据不同的条件转移到多个程序分支中去。
步骤;第一步:定义所要使用的数据段,并分别定义是字还是字节。
第二步:对所要使用寄存器进行压栈处理。
第三步:书写子程序,即寄存器中哪一位为1(从低位到高位)把程序转移到8个不同的程序分支中去。
第四步:测试结果。
1.对.EXE文件进行调试运行。
(1)用DEBUG调试运行,学会修改AL内容的方法;(2)对DSPKEY.EXE键入不同的字符,分别进行调试;(3)在MS-DOS下运行这两个.EXE文件。
六.实验结果及测试子程序:cmp al, 0 ;AL为逻辑尺je continuelea bx, branch_tableL:shr al, 1 ;逻辑右移jnc add1jmp word ptr[bx];段内间接转移add1: add bx, type branch_table ;add bx,2jmp L七.心得体会该实验让我了解用变址寻址方式实现跳跃表法源代码:Brand_addresses segmengtBranch_table dw routine_1dw routine_2dw routine_3dw routine_4dw routine_5dw routine_6dw routine_7dw routine_8branch_addresses endsprocedure_select segmentmain proc farassume cs: procedure_select ,ds:branch_addresses start:push dssub bx,bxpush bxmov bx,branch_addressesmov ds,bxcmp al,0je continue_main_linemov si,0l:shr al,1jnb not_yetjmp branch_table[si]not_yet:addsi,type branch_tablejmp lcontinue_main_line:routine_1:routine_2:retmain endpprocedure_select endsend start。
实验2 顺序与分支汇编语言程序设计实验
ARM技术原理与应用实验报告实验2 顺序与分支汇编语言程序设计实验专业电子信息工程班级14电信班学生姓名陈定光学号2014010243101指导教师曹计昌2017年4月19 日实验2 顺序与分支汇编语言程序设计实验1、实验目的(1)掌握顺序结构汇编语言程序设计;(2)掌握分支结构汇编语言程序设计;(3)掌握AXD环境下顺序结构和分支结构汇编语言程序的运行、调试。
2、实验要求1、实验必须在在ADS1.2环境下进行。
2、工程名、汇编语言源文件名按照下面规则命名:工程名:pj+学号最后4位+其它字符汇编语言源文件名:p+学号最后4位+其它字符+.s例如:张维智同学学号最后4位是3134因此,pj3134、pj3134a、pj31341等都是允许的工程名;而 p3134a.s、p3134b.s等都是允许的源文件名。
3、实验报告中需要说明实验中在ADS、AXD环境下进行的实际操作;4、实验报告中应给出实际的实验操作、编写的源程序、及计算机的调试观察结果;5、按照规定格式打印实验报告。
3、实验内容1、编写程序p2xxxx1.s完成下面任务:(1)将1、2、3、4、5、6、7、8依次传送给寄存器R1-R8;分析:如上图显示,寄存器r1-r8分别是存放1-8(2)用STMIA指令将R1-R8保存到刚好能够存储8个字数据ARY_A数组中。
分析:如上图显示,地址0x8058-0x8078分别存放1-8(3)用STMIB指令将R1-R8保存到刚好能够存储8个字数据ARY_B数组中。
分析:如上图显示,地址0x8088-0x80A7分别存放1-8(4)用STMDA指令将R1-R8保存到刚好能够存储8个字数据ARY_C数组中。
分析:如上图显示,地址0x8094-0x80B3分别存放1-8(5)用STMDB指令将R1-R8保存到刚好能够存储8个字数据ARY_D数组中。
(6)用LDMIA指令将ARY_A数组中数据5、6、7、8传送到R1-R4寄存器。
实验3 分支程序实验
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□√设计□创新实验日期:实验成绩:实验3 分支程序实验一.实验目的1.掌握单分支、双分支、多分支程序的设计方法;2.掌握利用DEBUG或CODEVIEW修改参数、检查结果的方法;1.熟悉汇编语言源程序的编辑、汇编、连接及调试过程。
二.实验内容1.猜数程序,预设一数字字符M,从键盘输入一个数字字符N,判断:若N <M,显示“TOO BIG”;若N >M 则显示“TOO SMALL”;否则显示“YOUR ARE RIGHT”data segmentM db ‘6’N db ?mesg1 db 0dh,0ah,’too small$’mesg2 db 0dh,0ah,’too big$’mesg3 db 0dh,0ah,’you are right$’data endscode segmentassume ds:data,cs:codestart:mov ax,datamov ds,axmov ah,01hint 21hmov N,alcmp al,1bh;如果输入是esc键就退出jmp exitcmp al,Mjb small;比M小就跳去smallja big;比M大就跳去bigmov dx,offset mesg3;显示正确mov ah,09hint 21hjmp startsmall:mov dx,offset mesg1;显示太小字符串mov ah,09hint 21hjmp startbig:mov dx,offset mesg2;显示太大字符串mov ah,09hint 21hjmp startexit:mov ah,4chint 21hcode endsend start输入3显示too small,输入9显示too big2.编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示“IT IS A DIGITAL”;若为A-Z或a-z字符,均显示“IT IS A LOWCASE LETTER”;若是回车字符<CR>(其ASCII码为0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入。
汇编语言-实验一__顺序与分支程序设计
汇编语言-实验一__顺序与分支程序设计实验一顺序与分支程序设计一、实验目的1)掌握顺序程序设计方法。
2)掌握分支程序的结构及分支程序的设计,调试方法。
3) 学习数据传送及算术和逻辑运算指令的用法。
4) 熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
二、实验内容1) 有一字变量BUF1是以原码表示的有符号数,要求将其转换为反码和补码,分别存入BUF2和BUF3单元,并在屏幕上显示出来。
2)有两个两字节无符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显示。
相加若有进位不存入存储单元。
3) 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示。
4) 要求同上,只是比较的数为有符号数。
5) 将1000H单元开始的10个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。
本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。
6) 从键盘上接收一位十进制数X,计算Y值,并以十六进制形式显示出来,Y 按下列公式计算。
2XXX,(,3),,2XXX,2(,4), Y,,2XX(,5),2,XX/2(,6),7) 从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。
a) 当输入字符为A,则计算X+Y,并以十六进制形式显示出来b) 当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来c) 当输入字符为C,则计算X*Y,并以十六进制形式显示出来d) 当输入字符为D,则计算X/Y,并以十六进制形式显示出来三、源程序EXAM1,1DATA SEGMENTBUF1 DW 9348HBUF2 DW 4 DUP(0),0AH,0DH,‘$’BUF3 DW 4 DUP(0),‘$’DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATAMOV DS,AXMOV AX,BUF1ADD AX,0JS NEXTMOV BUF2,AXMOV BUF3,AXJMP EEENEXT:AND AX,7FFFHNOT AXMOV BUF2,AXINC AXMOV BUF3,AXEEE: MOV CX,0004HMOV DI,OFFSET BUF2MOV DX,[DI]ADD DI,03BBB:MOV AX,DXAND AX,000FHCMP AL,0AHJB QQQADD AL,07HQQQ:ADD AL,30HMOV [DI],ALDEC DIPUSH CXMOV CL,04HSHR DX,CLPOP CXLOOP BBBMOV CX,0004HMOV SI, OFFSET BUF3MOV DX,[SI]ADD SI,03H CCC: MOV AX,DX AND AX,000FHCMP AL,0AHJB DDDADD AL,07H DDD:ADD AL,30HMOV [SI],ALDEC SIPUSH CXMOV CL,04HSHR DX, CLPOP CXLOOP CCCMOV DX,OFFSET BUF2MOV AH,09HINT 21HMOV DX,OFFSET BUF3MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM1,1?EXE,屏幕上显示结果: ECB7 ECB8EXAM1,2DATA SEGMENTA DB 34H,18H,2 DUP(0),’$’B DB 56H,83HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AL,AMOV BL,BADD AL,BLMOV AH,A+1MOV BH, B+1ADC AH, BHMOV A, ALMOV A+1, AHMOV CX, 0004HMOV DI, OFFSET AMOV DX, [ DI]ADD DI,03NEXT: MOV AX, DXAND AX,000FHCMP AL,0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CX04 MOV CL,SHR DX, CLPOP CXLOOP NEXTMOV DX, OFFSET AMOV AH, 09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START 执行程序EXAM1,2?EXE,屏幕上显示结果:9B8AEXAM1,3STACK SEGMENT STACKDB 1024 DUP(0) STACK ENDSDATA SEGMENT BUF DB 70H,35H,1FH MAX DB 2 DUP(,),‘$’ DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX, DATAMOV DS, AXMOV AL, BUFCMP AL, BUF+1JNB LP1MOV AL, BUF+1LP1: CMP AL, BUF+2 JAE LP2MOV AL, BUF+2LP2: MOV CX, 02H MOV DI, OFFSET MAX MOV DL, ALINC DILP3: AND AL, 0FH CMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30H MOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DL, CLPOP CXMOV AL, DLLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN 执行程序EXAM1,3?EXE,屏幕上显示结果:70 EXAM1,4STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDATA SEGMENTBUF DB 98H,75H,32HMAX DB 2 DUP(,),‘$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX, DATAMOV DS, AXMOV AL, BUFCMP AL, BUF+1JG LP1XCHG AL, BUF+1 LP1: CMP AL, BUF+2JG LP2XCHG AL, BUF+2 LP2: MOV MAX, AL MOV CX, 02HMOV DI, OFFSET MAXMOV DL, [DI]INC DILP3: MOV AL, DLAND AL, 0FHCMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN执行程序EXAM1,4?EXE,屏幕上显示结果: 75EXAM1,5ORG 2000H2000 BE0010 MOV SI, 1000 2003 BF0910 MOV DI, 1009 2006 8A14 MOV DL, [SI] 2008 80C200 ADD DL, 00200B 7B0B JPO 2018 200D 8615 XCHG DL, [DI] 200F 8814 MOV [SI], DL 2011 4F DEC DI 2012 39FE CMP SI, DI2014 7407 JE 201D 2016 EBF0 JMP 2008 2018 46 INC SI 2019 8A14 MOV DL, [SI] 201B EBF5 JMP 2012 201D F4 HLTEXAM1,6DATA SEGMENTTABLE DW X3,X4,X5,X6X DB 0Y DB 0BUF DB 2 DUP(0)DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AH,01HINT 21HXOR AH,AHCMP AL,33HJB EXCMP AL,37HJAE EXAND AL,0FHMOV X,ALSUB AL,3SHL AL,1MOV BX,OFFSET TABLE ADD BX,AXJMP [BX]X3: MOV AL,XINC ALMUL XJMP L9X4: MOV AL,XDEC ALDEC ALMUL XJMP L9X5: MOV AL,XMUL XJMP L9X6: MOV AL,X MUL XROR AX,1JMP L9EX: JMP L10L9: XOR AH,AH MOV X,ALAND X,0FH CMP X,09HJLE AB1ADD X,07HAB1:ADD X,30H MOV BL,XMOV BUF,BL AND AL,0F0H MOV CL,4ROR AL,CL CMP AL,09H JLE AB2ADD AL,07HAB2:ADD AL,30H MOV BUF+1,ALMOV AH,2MOV DL,BUF+1INT 21HMOV DL,BUFINT 21HL10:MOV AH,4CHINT 21HCODE ENDSEND START 执行程序EXAM1,6?EXE,屏幕上显示结果: 3C48515612EXAM1,7DATA SEGMENTX DB 0Y DB 0CU DB 0BUF DB 2 DUP(0)DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATAMOV DS,AXMOV AH,01HINT 21HMOV X,ALMOV AH,01HINT 21HMOV Y,ALCMP X,3AHJB DEXSUB X,07HDEX:SUB X,30HCMP Y,3AHJB DEYSUB Y,07HDEY:SUB Y,30HMOV AL,01HINT 21HCMP AL,41HJZ JIACMP AL,42HJZ FJIANCMP AL,43HJZ CHENG CMP AL,44HJZ CHUJMP JIESHU JIA:MOV AL,X ADD AL,YJMP PUT FJIAN:MOV AL,X CMP AL,YJAE A1MOV AL,YSUB AL,XJMP PUTA1: SUB AL,Y JMP PUT CHENG:MOV AL,XMUL YJMP PUT CHU:XOR AH,AH MOV AL,XDIV YPUT:MOV CU,ALAND CU,0FHCMP CU,09HJLE AB1ADD CU,07HAB1:ADD CU,30H MOV BL,CUMOV BUF,BLAND AL,0F0HMOV CL,4ROR AL,CLCMP AL,09HJLE AB2ADD AL,07HAB2:ADD AL,30H MOV BUF+1,AL MOV AH,2MOV DL,BUF+1INT 21HMOV DL,BUFINT 21H JIESHU:MOV AH,4CH INT 21HCODE ENDSEND START执行程序EXAM1,7?EXE,若输入8 4屏幕上显示结果: ACB4C16D2。
汇编(分支程序实验)报告2
二.理论分析或算法分析
输入一个两位十 进制数保存到 bx
cx=35 bx=cx bx>cx
输出“=”
输出“>”
输出“<”
结束
1
三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等)
1.实现两位十进制数猜数字游戏
Num equ 0305H ;非 紧缩 BCD 35 jlp: mov CX, Num mov AH, 1 int 21h mov BH, al int 21h mov BL, al and bx, 0f0fH cmp bx, cx jz jequ ja jbig mov dl, '<' jmp short jdisp jbig: mov dl, '>' jdisp: mov ah, 2 int 21h jmp jlp jequ: mov dl, '=' mov ah, 2 int 21h jmp $
报告提交日期
3
Байду номын сангаас
4
2.每次输出都换行
Num equ 0305H ; 非紧缩 BCD 35 jlp: mov CX, Num mov AH, 1 int 21h mov BH, al int 21h mov BL, al and bx, 0f0fH cmp bx, cx jz jequ ja jbig mov dl, '<' jmp short jdisp jbig: mov dl, '>' jdisp: mov ah, 2 int 21h MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H jmp jlp jequ: mov dl, '=' mov ah, 2 int 21h jmp $
汇编语言分支结构程序设计
实验七分支结构程序设计一、实验目的掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。
二、示例1、内存自BUF单元开始的缓冲区连续存放着10个学生的英文分数,编程序统计其中90~100,60~89,60以下者各有多少人?并把90-100分人数结果存放在P1单元中、60-89分人数结果存放在P2单元中,60分以下人数结果存放在P3单元中(P1、P2、P3为数据段的单元),最后把P1、P2、P3中的数以”P1=?、P2=?、P3=?”显示在屏幕上。
(注:数据以10进制显示)DATA SEGMENTBUF DB 70H,58H,50H,91H,99H,62H,75H,82H,74H,60H ;定义BUF单元地址开始的缓冲区的数据ORG 0020H ;程序执行时,将P1送到0200H内存单元P1 DB 0ORG 0030H ;程序执行时,将P2送到0300H内存单元P2 DB 0ORG 0040HP3 DB 0 ;程序执行时,将P3送到0400H内存单元ORG 0050H ;程序执行时,将DP1送到0500H内存单元DP1 DB'P1= $'ORG 0060H ;程序执行时,将DP2送到0600H内存单元DP2 DB'P2= $'ORG 0070H ;程序执行时,将DP3送到0700H内存单元DP3 DB'P3= $'ORG 0080H ;程序执行时,将COUNT送到0800H内存单元COUNT DW 10 ;'$'为地址运算符,返回当前程序语句的地址偏移值DATA ENDS;定义数据段CSEG SEGMENTASSUME CS:CSEG,DS:DATAPUSH DS ;将DS压入堆栈SUB AX,AX;将AX内存器内容清空PUSH AXSTART:MOV AX,DATAMOV DS,AX ;将数据传给数据段DSMOV CX,COUNT ;设置计数器CX,最多为10MOV SI,0 ;给SI赋值为0LP1:MOV AL,BUF[SI] ;将BUF内存单元的第si个内容赋值给ALCMP AL,90H ;判断该学生的分数是否>=90JNB LP2 ;若不低于90则跳转到LP2CMP AL,60H ;判断该学生的分数是否>=60JC LP3 ;若产生进位则跳转到LP3INC P2 ;将分数在60-89的学生的分数个数存放到P2中 JMP LP5 ;跳转到LP5,即循环遍历数组BUFLP3: INC P3 ;将P3中的个数+1JMP LP5 ;跳转到LP5LP2: INC P1 ;给P1中的个数+1LP5: INC SI ;将SI进行+1操作,即下一个成绩分数LOOP LP1 ;循环LP1LEA DX,DP1MOV AH,09HINT 21HMOV DL,P1ADD DL,30H ;转对应的ASCII值MOV AH,2INT 21H ;将P1数据转10进制输出LEA DX,DP2MOV AH,09HINT 21HMOV DL,P2ADD DL,30H ;转对应的ASCII值MOV AH,2INT 21H ;将P2数据转10进制输出LEA DX,DP3MOV AH,09HINT 21HMOV DL,P3ADD DL,30H ;转对应的ASCII值MOV AH,2INT 21HMOV AH,4CHINT 21H ;将P3数据转10进制输出CSEG ENDSEND START对上述程序加上注释,并运行观察结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名分支程序设计实验室实验楼403实验日期2013-6-11
1、实验目的及要求
目的:
1.编写一个分支程序设计的例子,进一步熟悉汇编语言的上机过程。
2.掌握分支程序设计常见的控制方法:逻辑尺控制、条件控制、地址跳跃表。
3.深刻认识汇编语言程序设计,掌握分支程序运行的指令和方法。
3、执行显示结果
4、Debug调试l1.exe,使用U命令查看l1.EXE可执行文件的反汇编代码
5、R命令查看寄存器内容
6、T单步执行指令
(1)MOV DS,AX,把AX值传送到DS中
(2)将5B送给AX的低4位
(3)把AL右移CL(4)位
(4)比较AL与05的大小
(5)若想等转到0012
(6)将AL的高两位清零,保留低两位
(7)显示
(8)分离X的高四位,得出Y的结果为5
(9)继续执行分离X的低四位,得出Z的结果为5
7、执行g命令,直接执行得出最终结果
六、[源程序清单]
DATA SEGMENT
X DB 5BH
Y DB ?
Z DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
STห้องสมุดไป่ตู้RT:
四、设计:
设计思想:将X字节单元中的内容(5B)送给AX的低四位,然后将AL的内容右移四位,将其低四位与5进行比较,分离出原X字节单元内容的高四位,送给Y单元,将低四位送给Z单元。
五、调试与测试
调试过程:
1、用MASM程序把ASM文件转换成OBJ文件;
2、用LINK程序把ASM文件转换成EXE文件;
MOV AX,DATA
MOV DS,AX
MOV AL,X
MOV CL,4
SHR AL,CL
CMP AL,5
JBE NEXT1
ADD AL,07H
NEXT1: ADD AL,30H
MOV Y,AL
MOV AL,X
AND AL,0FH
CMP AL,5
JBE NEXT2
ADD AL,07H
NEXT2: ADD AL,30H
MOV Z,AL
MOV DL,Y
MOV AH,2
INT 21H
MOV DL,Z
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
7、总结
通过本次上机实验,我了解并掌握了分支程序的条件控制方法。在运用U命令、T命令、D命令、G命令等的操作来分析过程时,会遇到各种各样的问题,但在调试过程中,对分支程序的条件控制方法有了正确的使用,逐步了解程序的执行过程,最终得出正确结果。我相信通过多次上机练习,反复分析讨论使用分支程序的常见控制方法,会为下一次实验奠定良好的基础。
要求:
1.编写或任选一个分支程序。
2.在DOS环境下进行汇编、连接、调试程序。
3.执行程序,并分析程序及查看寄存器和内存单元内容的变化。
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows xp,debug环境,masm
三、实验内容
设计程序,实现将X字节单元中的内容(5B)拆为两个十六进制数,并分别转换为相应的ASCII码存于Y及Z单元中。