实验Table表实现(汇编)
北京理工汇编语言实验一实验报告
汇编语言实验一实验报告——DOS 环境下的汇编语言编程环境使用班级:05211102姓名:庞珂学号:1120111306日期:2013.9.2早8:30~11:30实验一 DOS环境下的汇编语言编程环境使用(基础与验证型)一、实验要求和目的1、掌握汇编语言程序设计的基本流程和学会上机开发简单程序;2、熟练掌握宏汇编程序MASM 的使用;3、熟练掌握连接程序LINK 的使用;4、熟练掌握DEBUG 的使用;二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识汇编语言程序设计上机开发过程如图1.1 所示:1、汇编语言源程序的汇编过程汇编语言源程序的汇编过程是是利用汇编程序(MASM)对已编辑好的源程序文件(.ASM)进行汇编,将源程序文件中以ASCII 码表示的助记符指令逐条翻译成机器码指令,并完成源程序中的伪指令所指出的各种操作,最后可以建立3 个文件:扩展名为 .OBJ 的目标文件、扩展名为 .LST 的列表文件和扩展名为 .CRF 的交叉索引文件。
2、目标程序的连接过程连接程序进行连接时,其输入有两个部分:一是目标文件(.OBJ),目标文件可以是一个也可以是多个,可以是汇编语言经汇编后产生的目标文件,也可以是高级语言(例如C 语言)经编译后产生的目标文件;另一是库文件(.LIB),库文件是系统中已经建立的,主要是为高级语言提供的。
连接后输出两个文件,一是扩展名为 .EXE 的可执行文件,另一个是扩展名为 .MAP 的内存分配文件。
3、Debug 调试过程一个程序特别是比较复杂的程序不能保证没有一点错误。
因此,在投入正式运行前必须进行调试,以检查程序的正确性。
调试程序Debug 就是用来调试汇编语言程序的一种工具。
四、实验内容与步骤1、汇编、链接并调试给出的简单程序,找出程序中的错误。
(一)录入并建立汇编语言源程序文件(ASM 文件),例如:D:\MASM> EDIT TEST01.ASM;TEST01.ASM with several errorsDATA1 SEGMENTword1 DW 1, 9078Hbyte1 DB 21, 'World'DD 12345678HMsg DB 'Hello ,everyone!$'DATA1 ENDSSTACK SEGMENTsta dw 20 dup(?)Top equ size staSTACK ENDScode segmentassume cs:code,ds:data1,ss:stackStart:MOV AX,data1MOV DS,AXMOV DX,OFFSET MsgMOV AH,9INT 21hNopMOV AX,0MOV BX,1HADDITIONADD AX,BXINC BXCOM BX,10JAE ADDITIONMOV AH,4ch ;DOS terminate program functionINT 21hCode endsEND Start(二)用汇编程序MASM 将ASM 文件汇编成目标程序文件(OBJ 文件)其操作步骤如下: D:\MASM>MASM TEST01Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981–1985,1987. All rights reserved.Object filename [TEST01.OBJ]:Source listing [NUL.LST]:TEST01Cross-reference [NUL.CRF]:TEST0150674 + 450574 Bytes symbol space free0 Warning Errors0 Severe Errors汇编程序调入后,首先显示版本号,然后出现三个提示行。
汇编实验用表格形式显示字符
华北电力大学实验报告名称:汇编实验班级:计科0903学号:************学生姓名:***成绩:日期:2011 年 1 月实验一用表格形式显示字符一、实验的目的与要求实验目的:学习用汇编语言设计与编写循环程序,掌握运用ASCII码输出字符的方法,以及格式输出的设计。
实验要求:按15行X16列的表格形式显示ASCII码为10H一100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。
二、实验正文实验分析:由于每次只需显示一个字符,才用02功能调用即可,具体步骤如下:(1)显示每个字符可使用功能号为02 的显示输出功能调用,使用方法如下:mov ah,02h mov dl,输出字符的ASCII 码int 21h(2)显示空白符时,用其ASCII 码20 置入dl 寄存器。
每行结束时,用显示回车(ASCII 为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。
(3)由于逐个显示相继的ASCII 字符时,需要保存并不断修改dl 寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。
具体用法是:在显示空格或回车、换行符前用指令Push dx把dl 的内容保存到堆栈中去。
在显示空白或回车、换行符后用指令Pop dx恢复dl 寄存器的原始内容。
(4)应注意设计一个计数器来控制每一行的结束,当新的一行开始后再将计数器清零,进行下一行的计数,直至所有字符输出完毕程序结束。
三、流程图如下:四、实验结果如下:附录:程序源代码如下:CODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov dl,10hmov cx,15next1:push cxmov cx,16next:mov ah,02hint 21hinc dlpush dxmov dl,20hmov ah,02hint 21hpop dxloop nextpush dxmov dl,0dhmov ah,02hint 21hmov dl,0ahmov ah,02hint 21hpop dxpop cxloop next1MOV AH,4CHINT 21HCODES ENDS五、实验总结本实验做得比较成功实验得到了15X16的表格形式显示的结果。
汇编实验-查表操作
汇编实验实验二、查表操作。
查找0—9相应的平方原理:先存入了一些数据,让BX指向这些数据的首地址,然后根据AL (中的序号)查表转换指令,表的首地址置于BX中,AL中存放查找对象在表中的下标,所查找到的类容存放在AL中。
下面有2个版本,一个是存放的十六进制,一个是存放的十进制。
运行结果如下:版本一:(十六进制版,应运用的移位法,所以存放的是十六进制)DATAS SEGMENTTABLE DB 0H,1H,4H,9H,16H,25H,36H,49H,64H,81HINPUT DB 0DH,0AH,8 DUP(20H),'Please press the Enter key to exit!Or Input a nummble(0~9):',0DH,0AH,'$';0D为回车符,0A为换行符,20H 为空格符,这样使用,可使字符显示在一行的中间位置OUTERROR DB 0DH,0AH,8 DUP(20H),'ERROR!$';0DH为回车键OVER DB 0DH,0AH,8 DUP(20H),'THANKS',0DH,0AH,'$'ANS DB 0AH,'RESULT=$'RESULT DB ? ;存放结果DATAS ENDSS SEGMENT STACK ;设置堆栈段,避免Link时的警告S ENDSCODES SEGMENT ;代码段ASSUME CS:CODES,DS:DATAS,SS:SSTART:MOV AX,DATASMOV DS,AXLEA DX,INPUT ;输出提示信息,MOV AH,9 ;9号功能是在屏幕上显示多于一个的字符串,但必须要以'$'作为结束标志.INT 21H ;MOV AH,1 ;从键盘输入一个字符INT 21HCMP AL,0DH ;判断是否为回车键,若为则退出JZ EXITCMP AL,'0'JB ERROR ;和数值0的ASCII码比较大小,若小于(JB),则转到ERROR处CMP AL,'9'JA ERROR ;和数值9的ASCII码比较大小,若大于(JA),则转到ERROR处SUB AL,30H ;由ASCII码转换成数值,或者用(AND AL,0FH),以便后面查表使用LEA BX,TABLE ;置数据指针,表的首地址置于BX中XLAT ;查表转换指令,表的首地址置于BX中,AL中存放查找对象在表中的下标,所查找到的类容存放在AL中MOV RESULT,AL ;保留一个结果的副本LEA DX,ANSMOV AH,9INT 21H ;输出回车符MOV BL,RESULTMOV CL,4 ;位移的位数SHR BL,CL ;逻辑右移4位,即将高半字节移到低半字节OR BL,30H ;将十位上的数变成ASCII码CMP BL,'0'JZ NEXT1 ;若为0,只输出低位JNZ NEXT2 ;若不为0,输出高位和低位NEXT1:MOV BL,RESULT ;输出低位AND BL,0FH ;与(00001111)相与,只保留低半字节的类容OR BL,30H ;个位上的数变成ASCII码MOV AH,2HMOV DL,BL ;将要显示字符的ASCII码存到DL寄存器中,输出个位数INT 21HJMP STARTNEXT2:MOV AH,2H ;输出高位MOV DL,BL ;将要显示字符的ASCII码存到DL寄存器中,输出十位数INT 21HMOV BL,RESULT ;输出低位AND BL,0FH ;与(00001111)相与,只保留低半字节的类容OR BL,30H ;个位上的数变成ASCII码MOV AH,2HMOV DL,BL ;将要显示字符的ASCII码存到DL寄存器中,输出个位数INT 21HJMP STARTERROR:LEA DX,OUTERRORMOV AH,9INT 21HJMP STARTEXIT:LEA DX,OVERMOV AH,9INT 21HMOV AH,4CHINT 21HCODES ENDSEND START版本二:(存放的十进制数,运用的是除余法)DATA SEGMENTTABLE DB 0,1,4,9,16,25,36,49,64,81INPUT DB 0DH,0AH,8 DUP(20H),'Please press the Enter key to exit!Or Input a nummble(0~9):',0DH,0AH,'$';0D为回车符,0A为换行符,20H 为空格符,这样使用,可使字符显示在一行的中间位置OUTERROR DB 0DH,0AH,8 DUP(20H),'ERROR!$';0DH为回车键OVER DB 0DH,0AH,8 DUP(20H),'THANKS',0DH,0AH,'$'ANS DB 0AH,'THE RESULT IS:$'RESULT DB ? ;存放结果DATA ENDSS SEGMENT STACK ;设置堆栈段,避免Link时的警告S ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:SSTART:MOV AX,DATAMOV DS,AXSTA:MOV AH,2MOV DL,0DHINT 21H ;输出回车符LEA DX,INPUT ;输出提示信息,MOV AH,9 ;9号功能是在屏幕上显示多于一个的字符串,但必须要以'$'作为结束标志.INT 21HMOV AH,1 ;从键盘输入一个字符INT 21HCMP AL,0DH ;判断是否为回车键,若为则退出JZ EXITCMP AL,'0'JB ERROR ;和数值0的ASCII码比较大小,若小于(JB),则转到ERROR处CMP AL,'9'JA ERROR ;和数值9的ASCII码比较大小,若大于(JA),则转到ERROR处SUB AL,30H ;由ASCII码转换成数值,或者用(AND AL,0FH),以便后面查表使用LEA BX,TABLE ;置数据指针,表的首地址置于BX中XLAT ;查表转换指令,表的首地址置于BX中,AL 中存放查找对象在表中的下标,所查找到的类容存放在AL中MOV RESULT,AL ;保留一个结果的副本MOV AH,0 ;将AH清零MOV CH,0MOV CL,10DIV CLMOV CH,AH ;把余数送入CH中暂存MOV CL,ALCMP AL,0 ;将商与0相比较JZ NEXT1 ;商为零则跳转至NEXT1,只输出余数JNZ NEXT2 ;商不为零则跳转至NEXT2,输出商和余数NEXT1: ;只输出余数LEA DX,ANSMOV AH,9INT 21HMOV AL,CHADD AL,30HMOV DL,ALINT 21H ;输出余数JMP STA ;循环NEXT2: ;输出余数和商LEA DX,ANSMOV AH,9INT 21HMOV AL,CLADD AL,30H ;不为零则将数字转换成字符MOV DL,ALMOV AH,2INT 21H ;输出商MOV AL,CHADD AL,30HMOV DL,ALMOV AH,2INT 21H ;输出余数JMP STA ;循环ERROR:LEA DX,OUTERRORINT 21HJMP STARTEXIT:LEA DX,OVERMOV AH,9INT 21HMOV AH,2MOV DL,0DHINT 21H ;输出回车符MOV AH,4CHINT 21HCODE ENDSEND START。
贵州大学微机原理(汇编语言)实验报告_自编程序实验1_用表格形式显示字符
实验课程名称微型计算机原理实验报告实验项目名称自编程序实验1 专业班级电子信息科学与技术08级1班学生姓名学号实验成绩指导教师签字理学院实验时间:2010年12月6日自编程序实验1 用表格形式显示字符1、题目:用表格形式显示ASCII字符2、实验要求:按15行*16列的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白字符(ASCII码为0)隔开。
3、提示:(1)显示每个字符可使用功能号为2的显示输出功能调用MOV AH,2MOV DL,10H;字符从10H开始,每显示一个DL+1产生下一个字符INT 21H(2)显示空白符时DL=00H;(3)每行显示结束时需要显示回车(ASCII码为0DH)和换行(ASCII码为0AH),本行显示结束后可另起一行显示。
基本实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB '**This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFOMOV AH,9INT 21HMOV DX,10HLINE: MOV CL,16CYCLE: MOV AH,2INT 21HINC DXCMP DX,100HJZ DONEPUSH DXMOV AH,2MOV DL,0INT 21HPOP DXDEC CLCMP CL,0JZ NEXTJMP CYCLE| 微型计算机原理实验报告 1NEXT: PUSH DXMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HPOP DXJMP LINEDONE: MOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:加上表格线后的实验程序如下:;ASCII.ASMDA TA SEGMENTINFO DB 0DH,0AH,' **This is a display ASCII codesheet.(10H-100H)**',0DH,0AH,0DH,0AH,'$'DA T1 DB201,205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,20 5,205,209,205,205,205,209,205,205,205,209,205,205,205,209,'$'DA T2 DB205,205,205,209,205,205,205,209,205,205,205,209,205,205,205,209,205,205,20 5,209,205,205,205,209,205,205,205,209,205,205,205,187,0DH,0AH,'$'DA T3 DB0DH,0AH,200,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205, 2微型计算机原理实验报告|207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,'$'DA T4 DB205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,207,205,205,205,188,'$'DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXLEA DX,INFO ;显示提示信息MOV AH,9INT 21HLEA DX,DAT1 ;显示表格的顶线INT 21HLEA DX,DAT2 ;显示表格的顶线INT 21HMOV DX,10HLINE: PUSH DX ;对DL中的数据保护MOV DL,186 ;显示表格最左边边线MOV AH,2INT 21HMOV DL,0INT 21HPOP DX ;返回DL中的数据MOV CL,16MOV CH,16CYCLE: INT 21H ;显示DL里存的ASCII码字符INC DX ;DX自加,指向下一个字符CMP DX,100H ;与100H比较,看是否是显示完毕JZ DONE ;是,结束程序DEC CHCMP CH,0JZ NEXT0CALL DISP ;调用子程序,显示间隔线NEXT0: DEC CL ;CL自减,用于16个字符显示完毕后换行CMP CL,0JZ NEXTJMP CYCLENEXT: PUSH DXMOV DL,0INT 21HMOV DL,186 ;显示表格最右边边线INT 21H| 微型计算机原理实验报告 3MOV DL,0DH ;回车换行INT 21HMOV DL,0AHINT 21HPOP DXJMP LINEDISP PROCPUSH DXMOV DL,0INT 21HMOV DL,179INT 21HMOV DL,0INT 21HPOP DXRETDONE: MOV DL,0INT 21HMOV DL,186INT 21HLEA DX,DAT3MOV AH,9INT 21HLEA DX,DAT4INT 21HMOV AH,4CHINT 21HCODE ENDSEND START结果如图所示:4微型计算机原理实验报告|| 微型计算机原理实验报告 5。
实验一 汇编程序的汇编及运行
福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息工程年级: 2009 姓名:庄建军学号: 092230069 实验课程:汇编语言实验室号:__1#605 实验设备号:实验时间:指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求(1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DA TA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DA TA SEGMENTV AR1 DB 0, 25, ODH, 300V AR2 DB 12H, A4H, 6BHV AR3 DB ’ABCDEF’V AR4 DW 1234H, 5678HV AR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATABEING MOV AX, DA TAMOV DS, AXLEA SI, V AR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, V AR1+2MOV [BX], [SI]MOV V AR5+4, V AR4MOV AH, 4CHINT 21HCODE ENDSEND START(3)输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DA TASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)在DOS状态下,进入MASM目录;(2)输入命令:MASM文件名(可以不输入同扩张展);(3)在系统出现的提示中输入:object filename[.obj]:按回车键。
实验一 汇编基本操作资料教程
利用debug调试宏汇编程序
debug.exe是DOS系统自带的汇编调试软件, debug命令是DOS的内部命令,只要进入 DOS系统在任何目录下都可以运行。
debug调试程序有多种命令,可以显示修改 内存、汇编、反汇编、单步运行程序,中断 运行程序等,是调试汇编程序的常用工具。
debug可以直接在运行中汇编指令,进行调 试,但由于使用这一功能要记住内存地址, 所以在这里不做介绍,有兴趣可以看有关的 参考书,在这里只介绍完整的源程序的调试 方法。
START: MOV AX,DATA;数据段在内在重定位,以便程序能够正确引用的在数据段 中
MOV DS,AX
实验步骤
▪ 1、从“开始”->“运行”->输入“CMD”命令,进入 仿真DOS状态;
▪ 2、键入D: ↙,进入D盘(↙表示回车键);
▪ 3、输入CD MASM6↙,进入MASM6目录(即汇编程序 所在目录);
调试步骤:
首先编写源程序,可以用任何文本文字(不 带格式符)编辑系统编写源程序,如 Windows下的记事本,在这里我们一般使用 DOS下的文本编辑器edit.exe,与debug.exe一 样,edit也是DOS系统的内部命令,在任何 目录下都可以运行。但是要注意,无论用哪 种编辑器,源程序的后备名必须是.asm。如 a.asm等。
▪
工
▪
Source filename[hello.ASM]: ↙
即可
注:源文件名,上边已输入在此直接回车
▪
Object filename[hello.OBJ]: ↙
注:目标文件名,默认与源文件同名
▪
Source Listing[NUL.LST]:↙
件
汇编实验一实验报告
汇编实验⼀实验报告汇编语⾔程序设计实验报告课程名称汇编语⾔程序设计班级姓名学号指导教师汇编语⾔程序设计实验⼀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。
汇编实验【范本模板】
汇编语言实验报告学号:姓名:提交日期:成绩:【实验编号】 1【实验名称】用机器语言和汇编语言编程【实验内容】(1).使用Debug,将上面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器中的内容变化.机器码汇编指令B8 20 4e mov ax,4e20h05 16 14 add ax,1416hBb 00 20 mov bx,2000h01 d8 add ax,bx89 c3 mov bx,ax01 d8 add ax,bxB8 1a 00 mov ax,001ahBb 26 00 mov bx,0026h00 d8 add al,bl00 dc add ah,bl00 c7 add bh,alB4 00 mov ah,000 d8 add al,bl04 9c add al,9ch(2)。
将下面的3条指令写入从2000:0开始的内存单元中,利用这三条指令计算2的8次方. mov ax,1add ax,axjmp 2000:0003(3).查看内存中的内容PC机主板上的ROM中写有一个生产日期,在内存fff00h~ffffffh的某几个单元中,请找到这个生产日期并试图改变它。
试图将09/07/10修改为12/12/12因为为之都寄存器,所以只能读而不能修改。
(4)。
向内存从B8100开始的单元中填写数据,如:-e b810:0000 01 01 02 02 03 03 04 04填写不同的数据,观察现象现象:不同的数据所呈现出的图形是不一样的,但其出现在屏幕上的位置是没变的.改变填写的地址,观察产生的现象现象:改变所存储的位置,所产生的图像是不变的,但其出现在屏幕上的位置发生了变化。
【实验编号】 2【实验名称】汇编语言程序的编写过程【实验目的】1.掌握汇编语言程序的编写、编译、链接、执行过程;2。
了解程序分段的目的和意义;【实验内容】(1).使用debug,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空. mov ax,ffffmov ds,axmov ax,2200mov ss,axmov sp,0100mov ax,[0] ;ax=5BEAadd ax,[2] ;ax=5CCAmov bx,[4] ;bx=30F0mov bx,[6] ;bx=6029push ax ;sp=00FE;修改的内存单元的地址是2200:FE和2200:FF内容为5CCApush bx ;sp=00FC;修改的内存单元的地址是2200:FC和2200:FD内容为6029pop ax ;sp=00FE;ax=6029pop bx ;sp=0100;bx=5CC0push [4];sp=00FE;修改的内存单元的地址是2200:FE和2200:FF内容为30F0 push [6] ;sp=00FC;修改的内存单元的地址是2200:FC和2200:FD内容为2F39【实验编号】 3【实验名称】编程、编译、连接、跟踪【实验内容】(1)。
table的使用 (实验报告)
实验五 Table的使用
学号 201114004 姓名王渝迪专业计算机科学与技术成绩
【实验目的】
掌握Table的使用。
【实验内容】
1、熟悉Dreamweaver软件的环境;
2、掌握Table的使用。
【实验步骤】
1.在代码段中插入三行三列的表格,并在body中对表格进行描述“表格的跨行”。
2.在代码段中对表格进行设置。
对表格的第一行进行设置,其中包含三列,可以对每一列进行宽
度和颜色的设置,用width进行宽度设置,用bgcolor进行颜色设置。
对第三列进行设置时,用rowspan,则表示地三列要跨的行数。
在对表格第二行进行设置时,第二行第一列之设置颜色就可以了,因为表格宽度在第一行中已经设置过了。
在对第二行第二列进行设置时,用rowspan,则表示地二列要跨的行数。
第三列已经被第一行的第三列跨过,不需要设置了。
对第三行,只需设置第一列即可。
3.在代码段插入三行三列的表格,进行和上述类似的方法,就可以实现对表格的跨列。
【实验结果】
【实验心得和体会】
在本次实验的过程中,遇到了很多挫折,有时候设计出来的效果并不像自己想像中的那么好。
但是通过我自己的琢磨,并且向其他同学请教,终于做出来满意的效果。
汇编语言显示学生名次表实验报告
湖北科技学院计算机学院汇编语言课程设计课题题目:显示学生名次表学生姓名:学号:班级:2013年12 月26日一、实验目的进行汇编语言程序设计应用的综合性训练。
综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。
二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2010三、实验内容实验内容:编制一程序,要求接收从键盘输入的一个班的学生成绩和学号,对学生的成绩进行排序,再按学号顺序和学生名次顺序分别把学生成绩显示出来。
四、实验结果及分析实验功能:从键盘输入学生姓名和成绩,按照成绩的高低排名显示输出。
程序中设定的名字是英文的,需要小于9位字母,学生人数为3个。
程序思路:1、本程序包括一个主程序和五个子程序。
子程序包括INPUT键盘输入、COPY数据转存、CHANGE十进制数ASCII码转二进制、SORT按成绩排序和PRINT打印班级名单。
2、用变量p控制输入的学生的个数。
本程序中,p=3。
3、姓名和成绩输入分别用DOS中被调用的10号功能实现字符串输入。
在输入最后字符后,要将回车符改为0,以便输出时直接用9号功能显示姓名和成绩。
4、用buffer1和buffer2作为键入的姓名和成绩的缓存区,然后将所有人名和成绩用串传送指令转到smane和score1中保存,打印输出是可以使用。
5、将score1中成绩的十进制数ASCII码转换为二进制数score2.6、将score2中的成绩排序,同时将保存在mingci中的输入次序号也一换,以次序号作为排序指针,在smane和score1中查找相应的人名和成绩。
7、打印排序名单时,从mingci中取出次序号作为位移量,到smane和score1中取出姓名和对应的成绩用9号功能显示。
排序后mingci中先取出的次序号一定是成绩最高的人的,其他类推。
程序代码、代码解析及流程图主程序:流程图:→START:main proc farMOV AX,DATASMOV DS,AXmov es,axmov bx,0mov cx,0call input call sortcall printmov ah,4ch int 21h main endp数据段定义:DATAS SEGMENT 主程序开始初始化CALL INPUTCALL PRINT CALL SORT结束infor0 db 0ah,0dh,'sort= $'infor1 db 0ah,0dh,'input name: $'infor2 db 0ah,0dh,'input score:$'n equ 15 ;姓名长度m equ 4 ;成绩长度(3位+回车) p equ 4 ;输入的人数(4个q equ 3 ;成绩位数buff1 db n,?,n dup(0),'$';姓名缓冲区,加$以便输出buff2 db n,?,n dup(0),'$';成绩缓冲区sname db p dup(n+1 dup(0)) ;保存姓名score1 dw p dup(m+1 dup(0)) ;保存成绩score2 dw p dup(m+1 dup(0))mingci db p dup(0) ;名次x dw?sign1 dw 0sign2 dw 0cont db'1';计数DATAS ENDS子程序(INPUT) 1:输入姓名、成绩input procinc bx ;输入次数统计cmp bx,p ;输入次数ja exitlea dx,infor1 ;显示提示1mov ah,9int 21hlea dx,buff1 ;输入姓名mov ah,10int 21hmov al,buff1+1 ;实际输入个数,aladd al,2 ;+2,包含buffer1的0,1号单元mov ah,0mov si,ax ;回车od所在位置,跟在最后一个字符后mov buff1[si],0 ;将od换为0,便于输出显示lea dx,infor2 ;显示提示2mov ah,9int 21hlea dx,buff2 ;输入成绩mov ah,10int 21hmov al,buff2+1 ;实际输入个数add al,2 ;个数+2,包含0,1单元找到odmov ah,0mov si,axmov buff2[si],0 ;将od换为0,便于输出显示mov mingci[bx-1],bl ;bx为输入次数,保存输入次序cmp bx,1 ;第一次输入转let1jz let1add sign1,n+1 ;姓名间隔为n+1add sign2,q ;成绩间隔为qlet1:call copy ;子程序嵌套jmp inputexit:ret input endp流程图:→子程序INPUTBX+1BX>p ?输入姓名输入成绩保存输入次序CALL COPY RET 返回主程序N Y子程序INPUTBX+1BX>p ?输入姓名输入成绩保存输入次序CALL COPYRET 返回主程序N Y子程序2(COPY):数据转存copy procmov cx,n+1 ;姓名长度+1(包含$)lea si,buff1+2lea di,sname ;姓名传送到snameadd di,sign1 ;加上间隔值cldrep movsbmov cx,nmov ax,'$';用$覆盖姓名区,清除已输入的姓名lea di,buff1+2rep stosbmov cx,m+1 ;成绩位数+1(包含s)lea si,buff2+2lea di,score1 ;成绩传送到scoreladd di,sign2 ;加上间隔值cldrep movsblea si,buff2+2mov di,sign2call change ;二进制成绩,scorel2retcopy endp流程图:→子程序COPYCX=n+1姓名传送到sname成绩传送到scorelCALL CHANGERET返回子程序3(CHANGE):十进制数ASCII码→二进制change procmov x,0mov cx,[si-1] ;成绩的位数,cx and cx,000fh ;保留低4位rept2:mov al,[si] ;按位取出成绩cmp al,30h ;是否在0~9之间 jl exit1cmp al,39h子程序CHANGECX ←成绩的位数从buffer2取出一数→AL在0~9之间?去掉ASCII 码扩大10倍与X 相加循环结束?score2←二进制成绩xRET 返回YYNNjg exit1and ax,000fh ;去掉ASCII 码 xchg ax,xmov dx,10 ;将ax 中前一次形成的数扩大10倍mul dxadd x,ax ;保存到x inc si loop rept2mov ax,x ;按十进制形成的成绩以二进制保存mov score2[di],ax ;二进制成绩送入score2 mov x,0add sign2,2 ;下一个成绩单exit1: ret change endp流程图→子程序SORTCX ←人数-1保存外循环次数AI ←score2AI ≥AI+1score2中成绩互换mingci 中名字互换I=I+1内循环结束?恢复外循环次数外循环结束?RET 返回NYY YNN子程序4(SPORT ):按成绩排序 sort procmov cx,p ;数组长度 dec cxloop1:push cx ;保存外循环次数 mov bx,0 mov si,0loop2:mov ax,score2[bx]cmp ax,score2[bx+m+1] ;m+1=5 jge next ;降序 xchg ax,score2[bx+m+1];交换成绩 mov score2[bx],ax mov al,mingci[si]xchg al,mingci[si+1] ;交换成绩 mov mingci[si],alnext:add bx,m +1 ;下一个成绩 inc si loop loop2pop cx ;恢复外循环次数 loop loop1 ret sort endp子程序→子程序5(PRINT):打印排序名单print proclea dx,infor0 ;显示结果提示mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont ;显示名次序号mov ah,2int 21hinc contmov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingci[di] ;取名次dec al ;位置-1,因为地址从0开始mov bl,9 ;姓名位置=al×9(包含$) mul bllea dx,snameadd dx,ax ;偏移地址+姓名位移量mov ah,9 ;显示名字int 21hmov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingci[di] ;取名次dec al ;地址从0开始mov bl,5 ;成绩位移量=al×5(包含$)mul bllea dx,score1add dx,ax ;显示成绩mov ah,9int 21hinc diloop rept3retprint endpcodes endsEND START子程序PRINTCX←人数显示人数流程图→从mingci中取出一数→AL计算姓名单元位移量N显示姓名计算成绩单元位移量显示成绩修改地址值循环结束?RET返回运行结果:实验体会:在复杂的程序设计中,采用模块化结构可以划分功能、分界程序,使得程序有复杂变简单,变清晰。
汇编实验报告
实验一:用表格形式显示字符1.实验要求:按15行*16列的表格形式显示ASCLL码为10H—100H的所有字符,即以行为主的顺序及ASCLL码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCLL为0)隔开。
2.实验方法与步骤:(1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:Mov ah,02hMov dl,输出字符的ASCLL码Int 21h把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCLL码。
(2)显示空白符时,用其ASCLL码0置入dl寄存器。
每行结束时,用显示回车(ASCLL 为0dH)和换行符(ASCLL为0aH)来结束本行并开始下一行。
(3)由于逐个显示相继的ASCLL字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCLL字符。
具体的用法是:在显示空白或回车、换行符前用指令Push dx把dl的内容保存到堆栈中去。
在显示空白或回车、换行符后用指令Pop dx恢复dl寄存器的原始内容。
3.程序代码DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码main proc farASSUME CS:CODESpush dssub ax,axpush axmov bl,15;输出15行mov dl,10hloo:mov cx,16next:mov ah,02hint 21hinc dlpush dx;********每行16个字母mov dl,0mov ah,02hint 21hpop dxloop nextpush dx;***********回车换行mov dl,0dhmov ah,02hint 21hmov dl,0ahmov ah,02hint 21hpop dxdec blcmp bl,0jne looje exitexit: MOV AH,01hINT 21hMOV AX, 4chINT 21hmain endpMOV AH,4CHINT 21HCODES ENDSEND4.实验结果5.分析与结论程序的主体是一个简单的循环输出,包含内外两个循环,一个是每行内16个字符的循环输出,一个是总行数15行的循环输出。
北理工_汇编_实验三_字符串操作实验
本科实验报告实验名称:字符串操作实验课程名称:CPU与汇编实验实验时间:任课教师:实验地点:实验教师:实验类型:□原理验证■综合设计□自主创新学生姓名:学号/班级:组号:无学院:信息与电子同组搭档:无专业:信息工程成绩:一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK等应用程序。
三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用SI 寄存器保存源串首地址;(2)利用DI 寄存器保存目的串首地址;(3)利用CX 寄存器保存字符串长度;(4)利用CLD 或STD 指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。
其中,CLD 指令使DF=0,在执行串处理指令时可使地址自动增量;STD 使DF=1,在执行串处理指令时可使地址自动减量。
2、重复前缀指令,重复次数由计数寄存器CX 中存放的值决定,指令每重复执行一次,计数器CX 中值减1,当CX 中值减至0 时,停止重复执行,继续执行下一条指令REP无条件重复前缀,重复串操作直到计数寄存器的内容CX 为0为止。
经常与REP 配合工作的字符串处理指令有MOVS、STOS 和LODS。
REPE/REPZ 判断计数寄存器的内容CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
REPNE/REPNZ 判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS和SCAS。
3、字符串处理基本指令(1)MOVS 传送指令格式:MOVS DST,SRC或MOVSB(传送字节)或MOVSW(传送字)。
汇编实验一 实验报告
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编语言实验 按键、并口、查表、减法语句的用法
ORG 0100H START:
MOV SP,#70H CLR KEY1_Down_State MOV KEY1_State,#00H MOV KEY1_Down_Time,#00H MOV P3,#0FFH MAIN: LCALL KEY_SCAN JNB KEY1_Down_State,MAIN_END CLR KEY1_Down_State LCALL KEY1_Down_Proc MAIN_END: LJMP MAIN KEY1_Down_Proc: MOV A,KEY1_State INC KEY1_State MOV DPTR,#TAB MOVC A,@A+DPTR MOV P3,A
void Delay_ms(uint16 state) { uint16 i;
for(;state>0;state--) for(i=0;i<1000;i++);
} ************************************* Key-scan.c
#include<STC12C5A60S2.h> #include<common.h>
i = -1;
}
void KEY1_SCAN_END() {
Delay_ms(10); }
void KEY1_SCAN_DOWN() {
KEY1_Down_Time&Time==5) {
KEY1_Down_State=1; } }
void KEY_SCAN() {
if(KEY1==0) {
KEY1_SCAN_DOWN(); } else { KEY1_Down_Time = 0; }
编辑,汇编(川大微机原理实验资料和内容以及MASM使用方法)
在"开始"找到运行单击在运行中输入CMD输入CD空格\(反斜杠),(进入C盘根目录)输入F:(进入F盘)输入CD空格MASM(进入MASM文件夹)输入MASM空格0817.ASM(检查0817.ASM有无错误并生成.OBJ文件),直到没错输入LINK空格0817.OBJ(进行连接)输入0817.EXE运行汇编语言应用程序的开发一.汇编语言应用程序的开发过程开发一个可独立运行的汇编语言程序,主要包括以下基本步骤:1.用文本编辑软件编辑汇编语言源程序模块(SOURCE MODULES)。
一个完整的汇编语言源程序,可以是单模块结构格式,也可以是多模块结构格式。
无论采用哪一种结构格式,每一个模块都必须是一个可独立汇编的源程序文件(扩展名为.ASM)。
常用的文本编辑软件如EDIT,QEDIT,PE,或由其他高级语言(如TC,VC等)提供的编辑环境,都可以用来编辑汇编语言源程序。
2.调用宏汇编程序MASM对源程序的每一个模块进行汇编(包括对宏的处理),生成目标文件.OBJ。
在汇编过程中,MASM将对源程序模块进行语法检查,若有语法错误,则在汇编结束时,将错误信息显示出来。
这时程序设计者就得返回第二步,再调用编辑程序,并根据提示信息,对有语法错误的语句进行修改,然后再重新进行汇编,直到MASM未发现语法错误为止。
在汇编过程中,出了对每一个源程序模块文件都要生成对应的目标文件.OBJ外,还可以选择生成列表文件.LST和交叉引用文件.CRF,以提供调试时使用。
在汇编时产生的错误,通常称为语法错误。
注意:在汇编过程中不能发现程序的逻辑功能错误。
3.调试连接程序LINK,对一个或多个目标文件.OBJ进行连接,生成一个可执行文件.EXE。
这里所说的目标文件,有的可能是在汇编时产生的,有的可能是由某个库文件.LIB 提供的。
在连接过程中,还可以选择生成内存映像文件.MAP,以供在调试程序时使用。
在连接过程中,如果发现有错误,也会将错误信息显示在屏幕上。
操作系统实验报告表格设计总汇
计算机与信息学院 实验课程:操作系统阜阳师范学院 Fuyang Teachers College实验报告 ====================================================================姓名实验报告实验报告实验报告实验报告}if(h==N)f[k] = N;}for (k = 0; k < B; k++){ if (max < f[k]){ max = f[k];j = k;}}return j;}int main(){ int list[N];int change[N];int buf[B],f[B],i,j,k;int result[B][N];int old;int absent;srand((int)time(NULL));printf("\n The Random List:\n");for (i = 0; i < N; i++){ list[i] = rand() % P+1;printf("%3d", list[i]);}printf("\n----------------------------------------------\n");printf("\nOPT:\n");absent=0;for(i = 0; i < B; i++)buf[i] = f[i] = -1;for(i = 0; i < N; i++){ j=isInBuf(buf, list[i],&absent);if(j== -1) //需置换页面{ old=oldopt(i, buf, list, f);change[i]=buf[old];buf[old] = list[i];}else change[i]=-1;for(k=0;k<B;k++)result[k][i]=buf[k];}printf("the result is:\n");for(i=0;i<B;i++){ for(j=0;j<N;j++)f[i]++;}return j;}int main(){ int list[N];int change[N];int buf[B], f[B], i, j,k;int result[B][N];int old;int absent;srand((int)time(NULL));printf("\n The Random List:\n");for (i = 0; i < N; i++){ list[i] = rand() % P+1;printf("%3d", list[i]);}printf("\n-------------------------------------------\n");printf("\nLRU:\n");absent = 0;for(i = 0; i < B; i++)buf[i] = f[i] = -1;for(i = 0; i < N; i++){ j = isInBuf(buf, list[i],&absent);old = oldlru(f);if(j== -1){ change[i]=buf[old];buf[old] = list[i];f[old] = 0;}else{ f[j]=0;change[i]=-1;}for(k=0;k<B; k++)result[k][i]=buf[k];}printf("the result is:\n");for(i=0;i<B;i++){ for(j=0;j<N;j++)printf("%3d",result[i][j]);printf("\n");}printf("\nthe page is changed:\n");实验报告。
lab4-table-creation-and-alteration-1323--
实验4:表的创建及修改实验人:学号班级:计算机实验目的:1.掌握建表的SQL语法。
2.掌握修改表的SQL语法。
实验平台:1.Oracle 11g/12c实验过程记录及分析:1.以scott帐号登陆数据库,创建表test,包含三个字段:a-整数类型,b-最长10个字符的可变长度字符串,c-日期型,然后给此表添加一条记录,注意to_date()函数的用法。
SQL> create table test2 (3 a int,4 b varchar2(10),5 c date6 )7 /表已创建。
SQL> insert into test values2 (1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));已创建 1 行。
SQL> select * from test;A B C---------- ---------- --------------1 MIKE 23-10月-142.删除上面的test表,重新创建test,依然包含上面三个字段,并且建表时字段a附加主键约束,b附加unique约束,c附加非空约束,用列级指定名称来实现。
表建好后,验证每个约束的作用。
删除表并创建1 / 11SQL> drop table test2 /表已删除。
SQL> ed已写入 file afiedt.buf1 create table test2 (3 a int constraint pk_test primary key,4 b varchar2(10) constraint uq_test unique,5 c date constraint nn_test not null6* )SQL> /表已创建。
验证主键约束唯一性SQL> insert into test values2 (1,'MIKE',to_char(to_date('14/10/23','yy/mm/dd')));已创建 1 行。