1、(3)A5H,79H 011E 002C(4)1284H,5678H 68FC BC0C(5)A758,347FH DBD7 72097、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。R(寄存器)命令:R Register name 当R命令后面不带任何参数时,显示出13个16位寄存器的内容,同时又显示出标志寄存器各位状态。最后显示出下一条要执行指令地址及指令内容。检查寄存器命令:R标志位显示 1 0CF CY NCZF ZR NZSF NG PLAF AC NAOF OV NVPF PE PODF DN UPIF EI DI8、用R命令将A
2、X,BX内容改写为1050H及23A8H。当R命令后面带参数时,显示出该寄存器的内容,同时又可进行修改。实验报告要求:1、16进制数加减法手算结果及实验结果2、思考DEBUG命令的使用结果及自编程序运行记录 (列出自编程序)。实验二 内存操作数及寻址方法1、DEBUG命令:G,N,W,L及Q。2、8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。3、8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。4、8088汇编语言伪操作:BYTE PTR,WORD PTR。5、求累加和程序和多字节加减法程序。实验内容和步骤:一、内存操作数及各种寻址方式使用
3、:内容:MOV AX,1234 MOV 1000,AXMOV BX,1002MOV BYTE PTRBX,20MOV DL,39INC BXMOV BX,DLDEC DLMOV SI,3MOV BX+SI,DLMOV BX+SI+1,DLMOV WORD PTRBX+SI+2,2846步骤:1)用A命令键入上述程序,并用T命令逐条运行。2)每运行一条有关内存操作数的指令,用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意D命令显示结果中右边的ASCII字符及双字节数存放法。思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。二、求累加和程序:程序:MOV B
4、X,1000MOV CX,10SUB AX,AXLOP: ADD AL,BXADC AH,0J: LOOP LOPINT 31)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。2)用命令N AA将此程序命名为文件AA(文件名可任取)。3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址)4)用命令W 100将此程序存到AA命名的磁盘文件中。5)用命令Q退出DEBUG。6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。若调入DEBUG时忘了加AA文件名,可用N命令和L
5、命令将文件调入。7)用E命令在内存地址1000H处键入16个数字8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错。10)用G命令使程序运行到结束,检查AX的值是否正确。三、多字节加法程序。MOV DI,1000MOV CX,8MOV SI,2000CLC MOV AL,SIADC DI,ALINC SIINC DILOOP LOPINT 201)用命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一
6、个8字节加数,均为低字节在前面。3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?四、自编程序:用16位减法指令编一个32位(4字节)数减法程序,两个源操作数及结果存放地址同上题。调试并做记录。1、各项实验结果记录。2、自编程序原稿及调试后修正稿,写出原稿错在那里。实验三 汇编语言程序设计工具与上机过程1、掌握常用工具软件 MASM和LINK的使用。2、伪指令: SEGMENT,ENDS;ASSUME,END;OFFSET,DUP。3、利用的 1号功能实现键盘输入的方法。4、了解.EXE文件和.CO
7、M文件的区别及用INT 21H 4C号功能返回系统的方法。;*data segmentmessage db This is a sample program of keyboard and displydb 0dh,0ah,Please strike the key!,0dh,0ah,$data endsstack segment para stack stackdb 50 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset messagemov
8、ah,9int 21hagain: mov ah,1cmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2jmp againexit: mov ah,4chcode endsend start ;*实验步骤:1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3、用TYPE命令显示第1步产生的.LST文件。4、用LINK将.OBJ文件
9、连接成可执行的.EXE文件。5、在DOS状态下运行LINK产生的.EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。实验报告:1、汇编,连接及调试时产生的错误,其原因及解决办法。2、思考:1)若在源程序中把INT 21H的H省去,会产生什么现象?2)把 INT 21H 4CH号功能改为 INT 20H,行不行?实验四 数据串传送和查表程序1、堆栈:堆栈指示器SP和堆栈操作指令PUSH、POP。2、段寄存器和物理地址计算。3、查表法和查表指令XLAT。4、数据串传送程序和数据串传送
10、指令MOVS、STOS及重复前辍REP。5、循环指令ROL、逻辑与指令AND和清方向位指令CLD。6、伪操作指令DB。实验内容及步骤:一、利用查表方法把DX的内容(16进制数)转换成ASCII码:1、用A命令键入下列程序:MOV DI,2000MOV CX,4 PUSH CXMOV CL,4ROL DX,CLPOP CXMOV AL,DLAND AL,OFXLAT ;换码指令CLD ;方向标志置0STOSB ;(DI)(AC)INT 202、用A命令在1000H处键入下列ASCII码并用D命令检查之:DB 0 1 2 3 4 5 6 7 8 9 A B C D E F用D命令检查时注意左边的A
11、SCII码值和右边的字符。3、用R命令给DX送一个四位的16进制数(例7F8E)。4、用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)5、用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。可注意屏幕右边的ASCII字符与DX是否一致。二、数据串搬家程序:MOV SI,1000MOV DI,1500MOV CX,0F MOV AL, SIMOV DI,AL2、用A命令DB伪指令在1000H键入下列字符串:IBM_PC COMPUTER3、用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。4、若此程序中的目的地址
12、改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。三、段寄存器概念及字符串传送指令练习:MOV SI,0MOV DI,0MOV AX,1000MOV DS,AXMOV AX,1500MOV ES,AXCLD ;REP MOV SB2、用A命令DB伪指令在1000:0000处键入字符串IBM_PC COMPUTER,并用D命检查之3、用D命令检查0F00:1000处内容,看是否一样。为什么?4、用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地
13、址和目的物理地址(是多少?)仍和原来一样。1、各项实验记录和思考题。2、要求你修改的程序的清单(修改后)和调试记录。实验五 屏幕字符显示程序一、实验目的:1、8088指令: JMP,ROR,XOR,HLT。2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。4、微机的ASCII码表及控制字符。5、命令(.COM)文件及使用方法。6、利用CTRL+BREAK退出程序的方法及局限性。二、实验内容及步骤:1、利用INT 21 0AH号功能调用显示字符串。、用A命令在100H处键入下列程序:MOV AH, 9MOV D
14、X,110INT 21、用A命令在110H处键入下列字符串的ASCII码:DB This is a sample!、用N命令和W命令将此程序(包括数据区)存入文件名为AA.COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。、用Q命令退出DEBUG。、在DOS命令下打AA,运行此程序,即在屏幕上显示字符串,若不出现,用DEBUG检查程序有无错误。2、利用INT 21H 2号功能显示字符:XOR DL,DLMOVCX,100MOV AH,2INC DLPUSH CXDELY:MOV CX,0 LOOP JPOP CXLOOP DELY、用G命令运行程序,即在屏幕上依次缓慢的显示256个A
15、SCII字符。仔细观察每个字符,和ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?、按CTRL+BREAK退出此程序,若一次不行可多做几次。3、直接向VRAM送ASCII码显示字符MOV AX,B000XOR AL,ALXOR BX,BXMOV CX,100 MOV BX,ALINC AL、用N命令和W命令将此程序存入BB.COM文件中。(一定要先存入!、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同?4、自编一个程序,要求显示AX的内容,即能显示A
16、X=xxxx。调试时AX的内容可用R命令赋值,也可用MOV指令赋值。三、实验报告要求:1、各项实验记录及观察体会。2、利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?3、自编程序草稿及调试结果。实验六 条件转移指令JZ,JNZ,JC,JNC,CMP,SHR。2、程序:用字符搜索法确定字符串长度。3、程序:16进制数化为ASCII码的一般方法。一、用字符搜索法确定字符串长度:1、用A命令在100H开始的内存处键入下列程序:JMP STARTThis is the program to measurethe length of a string!START: M
17、OV BX,102MOV AL,24XOR CL,CL CMP AL,BXJZ EXITINC CLJMP LOPEXIT: INT32、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?二、16进制数转化ASCII码的一般方法(显示内存内容)1、用A命令在100H处键入下列程序:MOVSI,0MOVBL,10 MOVDL,SIMOVCL,4SHRDL,CLCMPDL,0AJC J1ADD DL,7J1: ADD DL,30MOV DL,SIAND DL,0FCMP DL,0AJC J2J2:MOV DL,20DEC BLJNZ LOP2、用N,W命令将此程序用CC.
18、COM文件名存入磁盘。3、用Q命令退出DEBUG。4、在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。5、自编程序:修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用.代替。1、自编程序及调试后的正确程序和结果。2、实验体会。实验七 子程序调用方法1、掌握利用堆栈传递参数的子程序调用方法。2、掌握子程序递归调用方法。3、过程调用伪指令: PROC,ENDP,NEAR和FAR。4、8088指令: CALL,RET,RET n。5、利用RE
19、T指令退出EXE文件的方法。一、利用堆栈传递参数的子程序调用。(求累加和)stack segment stackdb 256 dup(0);*ary1 db 1,2,3,4,5,6,7,8,9,10count1 equ $-ary1sum1 dw ?ary2 db 10,11,12,13,14,15,16,17,18count2 equ $-ary2sum2 dw ?*main segmentmain,ds:start proc farpush dsxor ax,axpush axmov ax,datamov ds,axmov ax,count1lea ax,ary1call far ptr
20、summov ax,count2lea ax,ary2retstart endpmain ends*proce segment procesum procfarmov bp,spmov cx,bp+6mov bx,bp+4adn: add al,bxadc ah,0inc bxloop adnmov bx,axret 4sum endpproce ends1、输入,汇编并将此程序连接成EXE文件。2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带的语句)的SP和堆栈内容。3、记录最后结果:SUM1,SUM2的段及偏移地址和它们的内容。二、子程序递归调用(求
21、阶乘)。db 100h dup(?*resul dw ?main proc far push dssub ax,axmov ax,datamov ax,5call factmov resul,axfact procand al,aljne iiamov al,1iia: push axdec alx2: pop cxmul clfact endpmain endp1、将程序输入,汇编并连接成EXE文件。2、用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。3、修改源程序,将阶乘数 3 改为本程序的最大允许值(是多少?),重新汇编连接之。用DEBUG运行并记录RESUL单元内容。4、若要在DOS命令下直接运行并显示阶乘结果(16进制形式),试修改程序并调试运行。1、实验记录。2、自编程序。3、体会和意见。实验八 多重循环程序1、掌握多重循环程序和排序程序设计方法。2、掌握带符号数的比较转移指令:JL,JLE,JG,JGE3、伪指令 EQU 及操作符 的使用。4、 COM文件的要求和生成过程。org 100hcodemain:jmp startarr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1