01实验一:用汇编语言实现字符串的显示
- 格式:ppt
- 大小:230.50 KB
- 文档页数:13
汇编语言---字符串操作指令汇编语言---字符串操作指令字符串操作指令的实质是对一片连续的存储单元进行处理,这片连续的存储单元由隐含指针DS:SI或ES:DI来指定;字符串操作指令可对内存单元按照字节、字、双字进行处理,并能根据操作对象的字节数使变址寄存器SI/DI增加或减少1、2、4字节;规定如下:A.当DF=0时,变址寄存器SI/DI增加1、2、4字节;即:变址寄存器SI/DI递增的步长可以是1、2、4字节;B.当DF=1时,变址寄存器SI/DI减少1、2、4字节;即:变址寄存器SI/DI递减的步长可以是1、2、4字节;一、取字符串数据指令(Load String Instruction)从指针DI:SI所指定的内存单元开始,取一个字节/字/双字,然后存入到AL/AX/EAX中,并根据标志位DF的值对寄存器SI 做相应的增减;把存放字符串数据的连续存储区当做是数据源,使用寄存器SI;该指令的执行不会影响任何标志位;指令格式: LODS 地址表达式LODSB/LODSW 地址表达式LODS 地址表达式;80386+在指令LODS中,它会根据"地址表达式"的属性来决定读取一个字节、字或双字;即:当该地址表达式的属性为字节、字或双字时,将从指针DI:SI处读取一个字节到AL中,或读取一个字到AX中,或读取一个双字到EAX中,与此同时,SI还将分别增减1、2、4字节;取字符串数据指令的功能示意图如下图所示:二、置字符串数据指令(Store String Instruction)该指令把寄存器AL/AX/EAX中的值存入指针ES:DI所指向内存单元开始的一片存储单元中,并根据标志位DF的值对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地,使用寄存器DI;该指令的执行并不会影响任何标志位;指令格式: STOS 地址表达式STOSB/STOSW 地址表达式STOSD 地址表达式;80386+置字符串数据指令的功能示意图如下图所示:三、字符串传送指令(Move String Instruction)该指令把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向的内存单元,并根据标志位DF的值对寄存器DI 和SI分别作相应的增减;该指令的执行并不会影响任何标志位;指令格式: MOVS 地址表达式1,地址表达式2MOVSB/MOVSW 地址表达式1,地址表达式2MOVSD 地址表达式1,地址表达式2 ;80386+字符串传送指令的功能示意图如下图所示:四、输入字符串指令(Input String Instruction)该指令是从某一指定端口接受一个字符串,并存入到一片连续的存储单元中;输入端口由寄存器DX指定,存储单元的首地址由指针ES:DI 来确定,读入的数据个数由寄存器CX来确定;在指令的执行过程中,还要根据标志位DF的值来对寄存器DI做相应的增减;把存放字符串的连续存储区当做是数据的目的地;该指令不会影响任何标志位;与指令有关的操作数ES、DI、DX和CX等都是隐含操作数; 指令格式: INS 地址表达式INSB/INSW 地址表达式INSD 地址表达式;80386+五、字符串输出指令(Output String Instruction)该指令是把一个给定的字符串输出到一个指定的端口中;输出端口由通用寄存器DX指定,输出数据的首地址由指针DS:SI确定,输出数据的个数由计数寄存器CX来确定;在指令执行的过程中,还要根据方向标志DF的值来对变址寄存器SI 做相应的增减;该指令的执行并不会影响任何标志位;与指令有关的操作数DS、SI、DX和CX等都是隐含操作数; 指令格式: OUTS 地址表达式OUTSB/OUTSW 地址表达式OUTSD 地址表达式;80386+六、字符串比较指令(Compare String Instruction)该指令是把指针DS:SI所指向的字节、字、双字的值与指针ES:DI 所指向的字节、字、双字的值相减,并用所得到的差来设置相关标志位;与此同时,变址寄存器SI和DI也将根据方向标志位DF的值做相应的增减;指令格式: CMPS 地址表达式1,地址表达式2CMPSB/CMPSW 地址表达式1,地址表达式2CMPSD 地址表达式1,地址表达式2 ;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串比较指令的功能示意图如下图所示:七、字符串扫描指令(Scan String Instruction)该指令是用指针ES:DI所指向字节/字/双字的值与相应的AL/AX/EAX的值相减,并依据所得到的差值来设置相关标志位;与此同时,变址寄存器DI还将根据方向标志DF的值来做相应的增减;指令格式: SCAS 地址表达式SCASB/SCASW 地址表达式SCASD 地址表达式;80386+受影响的标志位: AF,CF,OF,PF,SF,ZF字符串扫描指令的功能示意图如下图所示:八、重复字符串操作指令(Repeat String Instruction)前面的字符串操作指令:取字符串数据、置字符串数据、字符串传送、输入字符串、输出字符串、字符串比较、字符串扫描,等指令,都是执行一次所具有的功能;但是,每个字符串通常都是由多个字符组成的,所以,需要重复执行这些字符串操作指令;为了满足这种需要,指令系统提供了一组重复前缀指令;虽然在这些字符串指令的前面都可以添加一个重复前缀指令,但是由于指令执行结果的差异,对某个具体的字符串指令又不用重复前缀指令而改用其它循环来实现重复的需要;重复字符串操作指令对标志位的影响是由被重复的字符串操作指令来决定;1.重复前缀指令REP(Repeat String Instruction) 重复前缀指令是重复其后指定的字符串操作指令,重复的次数由计数寄存器CX来决定;指令格式:REP LODS/LODSB/LODSW/LODSDREP STOS/STOSB/STOSW/STOSDREP MOVS/MOVSB/MOVSW/MOVSDREP INS/INSB/INSW/INSDREP OUTS/OUTSB/OUTSW/OUTSD重复前缀指令的执行步骤如下:STEP1:判断: CX=0STEP2:如果CX=0,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响相关标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;从上面的重复前缀指令格式来看,虽然我们可以使用重复前缀指令来重复取字符串数据指令(第一组指令),但是可能会因为指令的执行结果而在程序中几乎不会使用;例如:编写一段程序,计算字符串"12345abcdefg"中各个字符的ASCII之和;解:......MESS DB '12345abcdefg' ;在数据段进行变量说明......MOV AX,SEG MESSMOV DS,AXLEA SI,MESS ;用DS:SI来指向字符串的首地址;MOV CX,13D ;重复次数XOR BX,BX ;置求和的初值为0REP LODSB ;循环去处字符; ......从程序片段中看,虽然"REP LODSB"能从字符串中逐一取出每个字符,但这个操作是在同一条指令中完成的,程序的其它指令根本无法处理每次取出的字符数据,指令的执行结果是:AL中只保存了最后一次取出的字符'h'的ASCII码;所以,为了实现本例的要求,不能使用重复前缀指令,而要把指令"REP LODSB"改写成如下四条指令:XOR AH,AH ;为后面的累加做准备AGAIN:LODSBADD BX,AX ;AL是被取出的字符,AH已被清0LOOP AGAIN2.条件重复前缀指令(Repeat String Conditionally) 条件重复前缀指令与重复前缀指令的功能相似,所不同的是:条件重复前缀指令中的重复次数不仅由CX来决定,而且还会由标志位ZF的值来决定;根据ZF所起的作用又可分为两种:相等重复前缀指令和不等重复前缀指令;A.相等重复前缀指令:指令格式:REPE/REPZ SCAS/SCASB/SCASW/SCASDREPE/REPZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件: CX!=0 且ZF=1STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行后,再转到步骤STEP1;B.不等重复前缀指令:指令格式:REPNE/REPNZ SCAS/SCASB/SCASW/SCASDREPNE/REPNZ CMPS/CMPSB/CMPSW/CMPSD该重复前缀指令的执行步骤如下:STEP1:判断条件:CX!=0 且ZF=0STEP2:如果条件不成立,则结束重复操作,执行程序中的下一条指令;STEP3:否则,CX=CX-1(不影响任何标志位),并执行重复前缀指令后面指定的字符串操作指令,在该指令执行完后,再转到步骤STEP1;。
微机原理及接口技术实验报告实验项目名称:显示一个字符串实验日期:实验成绩:实验评定标准:一、实验目的1.熟悉汇编语言源程序上机的过程和方法2.掌握宏汇编程序MASM5.1的链接程序LINK3.6的使用方法。
3.了解DEBUG调试汇编语言程序的过程和方法。
二、实验器材电脑、微型计算机原理及应用实验指导书及教科书三、实验内容(实验过程)1.编辑源程序利用文本编辑工具,生成一个汇编程语言程序的纯文本文件ASM。
在汇编源程序中,一行只能写一条语句。
2.汇编源程序3.链接目标程序4.调试可执行程序四、实验程序data segmentmesage db" how do you do" ,0dh,0ah,24hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea dx,mesagemov ah,09hint 21hmov ah,4chint 21hcode endsend start四、实验结果及分析分析:在汇编链接目标文件之后执行文件会出现“how do you do”。
若改变mesage db" how do you do" ,0dh,0ah,24h中的how do you do输入你想输出的字符串就可以了。
如果程序执行情况与预期不同,或执行时操作系统报告出错信息,就要通过调试工具进行动态调试,查找程序的问题。
查到问题后,又重回到第一步,重新开始,修改源程序问题。
实验课程名称微型计算机原理实验报告实验项目名称自编程序实验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。
汇编使⽤10h中断来显⽰字符串特么这个问题困扰了我好久,毕竟是个OS newbie,还没有汇编的基础。
在前天的加载loader的实验中,⽼师要求显⽰字符串,但是给的代码只是显⽰⼀个字符。
愚蠢的我实在没办法,最后为了按期完成实验,只能⼀个个字符地输出,呀真是羞耻。
好了,趁着清明假期,花了⼏个⼩时终于弄懂了。
下⾯进⼊正题!前戏是先对boot.asm和loader.asm编译:nasm -o boot.bin boot.asmnasm -o loader.bin loader.asm然后把boot.bin写⼊软盘a.img:dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc然后三连击,把挂载软盘:最后⼀个参数是你floppy⽂件夹的路径,⾃⼰随便去创建⼀个就好,不⼀定⽤/mnt⾥⾯的sudo mount -o loop a.img /home/jennings/exp2/floppy/sudo cp loader.bin /home/jennings/exp2/floppy/ -vsudo umount /home/jennings/exp2/floppy/重点来了(敲⿊板),以下是loader.asm的代码:org 0100h ; 告诉编译器程序加载到 0100h处mov ax, csmov ds, axmov es, axcall DispStr ; 调⽤显⽰字符串例程jmp $ ; ⽆限循环DispStr:mov ax, LoaderMessagemov bp, ax ; es:bp = 串地址mov cx, 31 ; cx = 串长度mov ax, 01301h ; ah = 13, al = 01hmov bx, 000ch ; 页号为0(bh = 0) ⿊底红字(bl = 0Ch,⾼亮)mov dh, 0;显⽰的⾏号mov dl, 39;显⽰的列号int 10h ; 10h 号中断retLoaderMessage: db "This is Zhengjianning's loader."解释程序:最上⾯的3个mov语句是让ds,es,cs指向同⼀个位置,之后调⽤显⽰字符串的函数,然后程序⽆限循环。
实验一汇编语言程序上机过程以及调试(1)一、预习内容1.工具软件MASM、LINK的使用2.常用DEBUG命令的使用: G,D,R,T,U,Q3.完整程序设计方法的格式。
二、目的要求1.掌握常用工具软件MASM、LINK的使用2.掌握常用DEBUG命令: G,D,R,T,U,Q 能灵活使用这些命令调试程序3.掌握完整程序设计方法的格式,能正确书写数据段,代码段等。
三、实验内容比较两个字符串string1和string2所含的字符是否相同,如果相同则显示’Match'否则显示’No match’.请读程序,并将程序补充完整。
DSEG SEGMENTstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.'mess1 db 'Match.',13,10,'$'mess2 db 'No match.',13,10,'$'DSEG ENDSCSEG SEGMENTassume cs:CSEG, ds:DSEG, es:DSEG,MAIN PROC FARstart: mov ax, dsegmov ds, axmov es, axlea si ,string1①cld②repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp: mov ah,09hint 21hmov ax, 4c00hint 21hMAIN ENDPCSEG ENDSend start实验步骤:1)用文字编辑工具(记事本或EDIT)将源程序输入完整后保存在d:\masm下,注意保存时将文件扩展名改为.asm(如test1.asm)。
2)屏幕左下角”开始”–“运行”输入cmd ,进入dos命令操作,先用d: 和cd mas m 命令改变路经,接着用”masm + 文件名” (如masm test1,这里文件名可以不带扩展名)对源文件进行汇编,产生.obj文件和.LST文件。
实验一汇编程序的汇编及运行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的值为多少?DATA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND2、输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DATA SEGMENTVAR1 DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ’ABCDEF’VAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATA BEING MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, VAR1+2MOV [BX], [SI]MOV VAR5+4, VAR4MOV AH, 4CHINT 21HCODE ENDSEND START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)编写源程序。
实验一认识Tddebug集成操作软件实验日志指导教师曾素华实验时间:2013 年04 月02 日学院计算机科学与技术专业计算机科学与技术班级0411005 学号2010211912 姓名李新娱实验室s401一、实验题目认识Tddebug集成操作软件二、实验目的1.熟悉汇编程序的开发过程。
2.认识Tddebug集成操作软件。
3.掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。
4.掌握INT 21H软件中断来调用DOS内部子程序的方法三、实验内容及说明1.实验内容:数据传送实验1)编程将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
参见示例出程序。
2)修改此程序,采用字符串传送指令完成。
2.实验中使用DOS功能调用(INT 21H):参见教材《32位微型计算机原理与接口技术》89页(1)显示字符串入口:AH=09H调用参数:DS:DX=串首地址,‘$’为结束字符。
(2)返回DOS系统入口:AH=4CH调用参数:AL=返回码四、实验主要步骤要求一数据传送实验1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。
3.使用Rmrun菜单中的Run运行程序,观察运行结果。
4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。
单步执行数据传送指令后,观察各寄存器及数据区的内容。
过程如下:3)按F7单步执行,在代码区中有一个三角,表示正在执行的指令。
每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。
4)检查内存数据区的内容,关键是找出用户程序的数据段和附加段:●方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区●方法2:选择菜单View| Dump,弹出内存数据显示窗口。
汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
微机原理实验报告西安电⼦科技⼤学实验报告班级:1303018学号:130********姓名:李胜东地点: EII-312批次:第批时间: 2015.11-2015.12实验⼀汇编语⾔编程实现1.实验⽬的(1)掌握汇编语⾔的编程⽅法(2)掌握DOS功能调⽤的使⽤⽅法(3)掌握汇编语⾔程序的调试运⾏过程2.实验内容(1)将指定数据区的字符串数据以ASCII码形式显⽰在屏幕上,并通过DOS功能调⽤完成必要提⽰信息的显⽰。
(2)在屏幕上显⽰⾃⼰的学号姓名信息。
(3)循环从键盘读⼊字符并回显在屏幕上,然后显⽰出对应字符的ASCII码,直到输⼊”Q”或“q”时结束。
实验中使⽤的DOS功能调⽤: INT 21H3.实验步骤及原理(1)运⾏QTHPCI软件,根据实验内容编写程序,参考程序流程如下图所⽰。
(2)使⽤“项⽬”菜单中的“编译”或“编译连接”命令对实验程序进⾏编译、连接。
(3)“调试”菜单中的“进⾏调试”命令进⼊Debug调试,观察调试过程中数据传输指令执⾏后各寄存器及数据区的内容。
按F9连续运⾏。
(4)更改数据区的数据,考察程序的正确性。
4.实验源代码DATA SEGMENTNUMBER DB 'SNO:130********',0AH,'NAME:lishengdong',0DH,0AH,'$';0DH (回车))0AH(换⾏)24H($)结束MSG1 DB 0AH,0DH,'If you want to leave,please input: q or Q ',0AH,0DH,'$'MSG2 DB 0AH,0DH,0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is: $'SD DB ' 'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV SI,OFFSET DATAMOV CX,5A:MOV AL,DS:[SI]AND AL,0F0HCMP AL,0A0HJB A1ADD AL,07HA1:SHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HMOV AH,02HMOV DL,ALINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB A2ADD AL,07HA2:OR AL,30HMOV AH,02HMOV DL,ALINT 21HINC SILOOP AMOV AX,DATAMOV DS,AXMOV DX,OFFSET NUMBERMOV AH,09HINT 21HMOV DX,OFFSET MSG1 MOV AH,09H INT 21HC1: MOV DX,OFFSET MSG2 MOV AH,09H INT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验⼆数码转换实验1.实验⽬的(1)掌握不同进制数及编码相互转换的程序设计⽅法。