收藏 分享(赏)

汇编实验说明书.doc

上传人:yjrm16270 文档编号:7360606 上传时间:2019-05-16 格式:DOC 页数:40 大小:167KB
下载 相关 举报
汇编实验说明书.doc_第1页
第1页 / 共40页
汇编实验说明书.doc_第2页
第2页 / 共40页
汇编实验说明书.doc_第3页
第3页 / 共40页
汇编实验说明书.doc_第4页
第4页 / 共40页
汇编实验说明书.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、1汇编语言程序设计实验说明书实验一 DOS 常用命令及 8088 指令使用 1实验二 内存操作数及寻址方法 .4实验三 数据串传送和查表程序 .6实验四 屏幕字符显示程序 .8实验五 条件转移指令 .10实验六 汇编语言程序上机过程 .13实验七 分枝程序 .15实验八 多重循环程序 .17实验九 子程序 .18实验十 音乐程序 .21实验十一 数码转换程序 .23实验十二 键盘和窗口程序 .26实验十三 活动图形显示程序 .28实验十四 磁盘文件操作程序 .31实验十五 绝对磁盘读写程序 .371实验一 DOS 常用命令及 8088 指令使用实验目的:通过实验掌握下列知识: 1、DOS命令:

2、 DIR,DEL,RENAME,FORMAT,COPY。2、8088指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG3、DEBUG命令: A,D,E,F,H,R,T,U。4、BCD码,ASCII码及用16进制数表示二进制码的方法。5、8088寄存器: AX,BX,CX,DX,F,IP。内容及步骤:一、DOS常用命令练习:1、将机房提供的系统盘插入A驱动器中,开机,出现提示符后打入命令FORMAT B:/S。等屏幕上出现提示后将新盘插入B驱动器并打回车。PC机即对新盘格式化并将糸统拷入。2、打命令 COPY A:*。* B 将糸统盘上全部文件拷到你的盘上。3、将新盘插到 A驱动器

3、中,用DIR命令查看盘上文件。4、用命令 COPY DEBUG。COM BUG 复制一个文件。5、用命令 RENAME BUG BG 将BUG 文件改为BG。6、用命令 DEL BG 将文件BG删除。在操作时要注意提示信息,并按提示操作。二、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示苻 _ 。2、用命令 F100 10F A 将A的ASCII码填入内存。3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。5、用命令 E100 30 31 32 3F将30H-3FH写入

4、地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。8、用R命令将AX,BX内容改写为1050H及23A8H。三、8088常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35M

5、OV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。并注意标志位有无变化。2、加减法指令:21)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX2)用U命令检查键入的程序及对应的机器码。3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。思考:这次运行还是打入T,行不行?怎么办?用R命令检

6、查一下IP的内容。注意T命令与IP的关系。3、带进位加减法:1)用A命令在内存200H处键入下列内容,并用U命令检查:MOV AH,12MOV AL,84MOV CH,56MOV CL,78ADD AL,CLADC AH,CHMOV DH,A7MOV DL,58SUB DL,7FSBB DH,342)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运 行之。4、BCD码加减法1)内容:MOV AL,58ADD AL,25DAA2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存器及AF内容。实验报告要求:1

7、、16进制数加减法手算结果及实验结果2、8088常用指令练习部分的逐条运行记录,思考结果及自编程序运行记录 (列出自编程序)。附:DEBUG 使用:1、打 DEBUG 进入 DEBUG,显示提示苻 _ 。2、退出DEBUG命令:Q3、显示内存命令:D 起始地址 结束地址4、修改内存命令:E 起始地址,连续修改打空格键。打回车键退出E命令。5、检查寄存器命令:R3标志位显示 1 0CF CY NCZF ZR NZSF NG PLAF AC NAOF OV NVPF PE PODF DN UPIF EI DI6、修改寄存器命令:R 寄存器名7、小汇编命令:A 起始地址,不输入指令打回车键退出A命令

8、。8、反汇编命令:U 起始地址 结束地址9、文件命名命令:N 盘号:文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址10、读扇区命令:L 内存地址 盘号(0-A:,1-B:) 扇区号 扇区数11、写扇区命令:W 内存地址 盘号 扇区号 扇区数12、运行命令:G=起始地址 结束(断点)地址13、单步命令:T=起始地址 运行指令数,进入子程序内部。14、单步命令:P=起始地址 运行指令数,不进入子程序内部。15、内存搬家命令:M 起始地址 结束地址 目的地址4实验二 内存操作数及寻址方法 实验目的:通过实验掌握下列知识: 1、DEBUG命令:G,N,W,L及Q。 2、8088系统

9、中数据在内存中的存放方式和内存操作数的几种寻址方式。 3、8088指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。 4、8088汇编语言伪操作:BYTE PTR,WORD PTR。 5、求累加和程序和多字节加减法程序。 实验内容和步骤: 一、内存操作数及各种寻址方式使用 : 内容: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

10、)用A命令键入上述程序,并用T命令逐条运行。2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意D命令显示结果中右边的ASCII字符及双字节数存放法。思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。 二、求累加和程序:程序:MOV BX,1000MOV CX,10SUB AX,AXLOP: ADD AL,BXAD CAH,0INC BXJ: LOOP LOPINT3步骤:1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。2)用命令N AA将此

11、程序命名为文件AA(文件名可任取)。3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开5始地址)4)用命令W 100将此程序存到AA命名的磁盘文件中。5)用命令Q退出DEBUG。6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。7)用E命令在内存地址1000H处键入16个数字8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查AX,BX的值是否符合你的预计值。9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样,若不一样,检查程序是否有错

12、。10)重复G J与T,再检查AX是否正确。11)用G命令使程序运行到结束,检查AX值是否正确。三、多字节加法程序。程序:MOV DI,1000MOV CX,8MOV SI,2000CLCLOP: MOV AL,SIADC DI,ALINC SIINC DILOOP LOPINT 20步骤:1)用命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。3)。用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试一试。四。自编程序:用16位减

13、法指令编一个32位(4字节)数减法程序,两个源数及结果存放地址同上题。调试并做记录。实验报告要求:1、各项实验结果记录。2、自编程序原稿及调试后修正稿,写出原稿错在那里。6实验三 数据串传送和查表程序实验目的:通过实验掌握下列知识:1、堆栈。堆栈指示器SP和堆栈操作指令PUSH。POP。2、段寄存器和物理地址计算。3、查表法和查表指令XLAT。4、数据串传送程序和数据串传送指令MOVS。STOS及重复前辍REP。5、循环指令ROL。逻辑与指令AND和清方向位指令CLD。6、伪操作指令DB。实验内容及步骤:一、利用查表方法把DX的内容(16进制数)转换成ASCII码:1、用A命令键入下列程序:M

14、OV BX,1000MOV DI,2000MOV CX,4LOP: PUSH CXMOV CL,4ROL DX,CLPOP CXMOV AL,DLAND AL,OFXLATCLDSTOSBLOOP LOPINT 202、用A命令在1000H处键入下列ASCII码并用D命令检查之:DB 0 1 2 3 4 5 6 7 8 9 A B C D E F用D命令检查时注意左边的ASCII码值和右边的字符。3、用R命令给DX送一个四位的16进制数(例7F8E)。4、用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)5、用G命令将此程序运行到结束,并用D命

15、令检查2000H处所转换的结果。可注意屏幕右边的ASCII字符与DX是否一致。二、数据串搬家程序:1、用A命令键入下列程序:MOV SI,1000MOV DI,1500MOV CX,0FLOP: MOV AL,SIMOV DI,ALINC SIINC DILOOP LOP7INT 202、用A命令DB伪指令在1000H键入下列字符串:IBM_PC COMPUTER3、用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。4、若此程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。三、段寄存器概念及字符串传

16、送指令练习:1、用A命令键入下列程序:MOV SI,0MOV DI,0MOV AX,1000MOV DS,AXMOV AX,1500MOV ES,AXMOV CX,0FCLDREP MOVSBINT 202、用A命令DB伪指令在1000:0000处键入字符串IBM_PC COMPUTER,并用D命检查之3、用D命令检查0F00:1000处内容,看是否一样。为什么?4、用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。5、修改此程序,使ES与DS为同一值,以减少一条指令,而源物理地址和目的物理地址(是多少?)仍和原来一样。实验报告要求:1、各项实验记录和思考题。2、要

17、求你修改的程序的清单(修改后)和调试记录。8实验四 屏幕字符显示程序实验目的:通过实验掌握下列知识:1、8088指令: JMP,ROR,XOR,HLT。2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。4、IBM-PC机的ASCII码表及控制字符。5、命令(。COM)文件及使用方法。6、利用Break退出程序的方法及局限性。实验内容及步骤:一、利用INT 21 0AH号功能调 用显示字符串。1、用A命令在100H处键入下列程序:MOV AH, 9MOV DX,110INT 21INT 202、用A命令在110

18、H处键入下列字符串的ASCII码:DB This is a sample!$3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。4、用Q命令退出DEBUG。5、在DOS命令下打AA,运行此程序,即在屏幕上显示This is a sample!字符串,若不出现,用DEBUG检查程序有无错误。二、利用INT 21H 2号功能显示字符:1、用A命令在100H处键入下列程序:XOR DL,DLMOVCX,100LOP:MOV AH,2INT 21INC DLPUSH CXMOV CX,8DELY: PUSH CXMOV CX,0J:

19、LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 202、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?3、按CTRL+BREAK退出此程序,若一次不行可多做几次。三、直接向VRAM送ASCII 码显 示字符91、用A命令在100H处键入下列程序:MOV AX,B000MOV DS,AXXOR AL,ALXOR BX,BXMOV CX,100LOP: MOV BX,ALINC BXINC ALPUSH CXMOV CX,8DELY: PUSH

20、CXMOV CX,0J: LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 202、用N命令和W命令将此程序存入BB.COM文件中。(一定要先存入!)3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H2号功能调用有何不同?四。自编一个程序,要求显示AX的内容,即能显示AX=xxxx。调试时AX的内容可用R命令赋值,也可用MOV指令赋值。实验报告要求:1、各项实验记录及观察体会。2、利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?3

21、、自编程序草稿及调试结果。10实验五 条件转移指令实验目的:通过实验掌握下列知识:1、8088指令:JZ,JNZ,JC,JNC,CMP,SHR。2、程序:用字符搜索法确定字符串长度。3、程序:16进制数化为ASCII码的一般方法。实验内容及步骤:一、用字符搜索法确定字符串长度:1、用A命令在100H开始的内存处键入下列程序:JMP STARTDB This is the program to measureDB the length of a string!$START: MOV BX,102MOV AL,24XOR CL,CLLOP: CMP AL,BXJZ EXITINC BXINC CL

22、JMP LOPEXIT: INT32、用G命令运行此程序,并检查CL的统计长度是否与你自己统计的实际长度是否一样?二、16进制数化ASCII码的一般方法( 显示内存内容)1、用A命令在100H处键入下列程序:MOVSI,0MOVBL,10LOP: MOVDL,SIMOVCL,4SHRDL,CLCMPDL,0AJC J1ADD DL,7J1: ADD DL,30MOV AH,2INT 21MOV DL,SIAND DL,0FCMP DL,0AJC J2ADD DL,7J2: ADD DL,30MOV AH,2INT 21MOV DL,2011MOV AH,2INT 21INC SIDEC BLJ

23、NZ LOPINT 202、用N,W命令将此程序用CC.COM文件名存入磁盘。3、用Q命令退出DEBUG。4、在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。5、自编程序:修改上面程序,使除以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用.代替。三、综合程序(选做):测量一字符串长度,并用16进制数显示之程序:JMP STARTDB This is a program to measure the length of a string。DB 0D,0A

24、DB the length of the string is: $START: MOV AH,9MOV DX,102INT 21MOV BX,101MOV AL,$MOV DH,FFLOP: INC BXINC DHCMP AL,BXJNZ LOPMOV CH,2MOV CL,4LOP1: ROL DH,CLMOV DL,DHAND DL,0FADD DL,30CMP DL,3AJC JADD DL,7J: MOV AH,2INT 21DEC CHJNZ LOP1INT 20键入此程序,存入?.COM文件中并在DOS命令状态下直接运行之,若未出现预期结果,用DEBUG检查有否错误?实验报告要求

25、:121、自编程序草稿及调试后的正确程序。2、实验体会。13实验六 汇编语言程序上机过程实验目的:1、掌握常用工具软件 PE,MASM和LINK的使用。2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。3、利用的 1号功能实现键盘输入的方法。4、了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。程序:data segmentmessage db This is a sample program of keyboard and displydb 0dh,0ah,Please strike the key!,0dh,0ah,$dat

26、a endsstack segment para stack stackdb 50 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov dx,offset messagemov ah,9int 21hagain: mov ah,1int 21hcmp al,1bhje exitcmp al,61hjc ndcmp al,7ahja ndand al,11011111bnd: mov dl,almov ah,2int 21hjmp againexit: mov ah,4

27、chint 21hcode endsend start实验步骤:1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。3、用TYPE命令显示1产生的.LST文件。4、用LINK将.OBJ文件连接成可执行的.EXE文件。145、在DOS状态下运行LINK产生的。EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。实验报告:1、汇编,连接及

28、调试时产生的错误,其原因及解决办法。2、思考:1)若在源程序中把INT 21H的H省去,会产生什么现象?2)把 INT 21H 4CH号功能改为 INT 20H,行不行?15实验七 分枝程序实验目的:1、掌握利用间接转移指令JMP BX实现多岔分枝的方法。2、宏替换指令MACRO及ENDM。3、符号扩展指令CBW。实验程序:disp macro msglea dx,msgmov ah,9int 21hmov ah,4chint 21hendmstack segment stackdb 256 dup(0)stack endsdata segmentparm db 16 dup(?)brtabl

29、e dw offset bra,offset brb,offset brcdw offset brd,offset bre,offset brfmsga db I like my IBM-PC!$msgb db How are you!$msgc db Nibao College$msgd db This is a sample$msge db Wellcome use my coputer!$msgf db Theassemder language of 8088$errms db Error! invalid parameter!$data endscode segmentassume c

30、s:code,ds:data,ss:stackstart: mov ax,datamov es,axmov si,80hlea di,parmmov cx,16cldrep movsbmov ds,axcmp parm,2jc errmov al,parm+2sub al,30hjc errcmp al,616jnc errlea bx,brtablecbwadd ax,axadd bx,axjmp bxerr: disp errmsbra: disp msgabrb: disp msgbbrc: disp msgcbrd: disp msgdbre: disp msgebrf: disp m

31、sgfcode endsend start实验步骤:1、输入并汇编此程序。要求生成一个 .LST文件。用TYPE命令检查 .LST文件,观察宏替换命令产生的指令集。2、将OBJ文件连接成EXE文件(假设为AA。EXE)。3、用命令DEBUG AA.EXE XXX (XXX为任意字符串)将AA.EXE带参数调入DEBUG用D命令观察DS:0080处的命令行,记录80H处的内容和字符个数的关糸。4、退出DEBUG。直接带参数运行此程序:AA n(n=0-5)依次观察并记录 n从0到5时的运行结果。17实验八 多重循环程序实验目的:1、掌握多重循环程序和排序程序设计方法。2、掌握带符号数的比较转移指

32、令:JL,JLE,JG,JGE3、伪指令 EQU 及操作符 $的使用。4、 COM文件的要求和生成过程。程序:code segmentorg 100hassume cs:code,ds:codemain: jmp startarray dw 1234h,5673h,7fffh,8000h,0dffhdw 0ab5h,0369h,005fh,5634h,9069hcount equ $-arraystart: mov cx,countshr cx,1dec cxmov bl,-1again: mov dx,cxand bl,blje exitxor bl,blxor si,siagain1: m

33、ov ax,arraysicmp ax,arraysi+2jle nchgxchg arraysi+2,axmov arraysi,axmov bl,-1nchg: inc siinc sidec dxjnz again1loop againexit: int 20hcode endsend main实验步骤:1、输入,汇编并连接此程序。忽略连接时的无堆栈告警。2、用EXE2BIN将 .exe文件转换为 。COM文件,命令格式:EXE2BIN? ?.EXE ?.COM3、在DEBUG下运行此程序,记录运行结果。4、将转移指令JLE改为JBE,JGE和JAE,分别运行并记录排序结果。18实验九

34、子程序实验目的: 1、掌握利用堆栈传递参数的子程序调用方法。2、掌握子程序递归调用方法。3、过程调用伪指令: PROC,ENDP,NEAR和FAR。4、8088指令: CALL,RET,RET n。5、利用RET指令退出EXE文件的方法。实验内容及步骤: 一、利用堆栈传递参数的子程序 调用。 (求累加和)程序:stack segment stackdb 256 dup(0)stack endsdata segmentary1 db 1,2,3,4,5,6,7,8,9,10count1 equ $-ary1sum1 dw ?ary2 db 10,11,12,13,14,15,16,17,18co

35、unt2 equ $-ary2sum2 dw ?data endsmain segmentassume cs:main,ds:data,ss:stackstart proc farpush dsxor ax,axpush axmov ax,datamov ds,axmov ax,count1push axlea ax,ary1push axcall far ptr summov ax,count2push axlea ax,ary2push axcall far ptr sumretstart endpmain endsproce segmentassume cs: proce19sum pr

36、ocfarmov bp,spmov cx,bp+6mov bx,bp+4xor ax,axadn: add al,bxadc ah,0inc bxloop adnmov bx,axret 4sum endpproce endsend star步骤:1、输入,汇编并将此程序连接成EXE文件。2、用DEBUG的断点命令和T命令运行此程序,观察并记录每次过程调用及进出栈指令前后(带;的语句)的SP和堆栈内容。3、记录最后结果:SUM1,SUM2的段及偏移地址和它们的内容。二、子程序递归调用(求阶乘)。程序:stack segment stackdb 100h dup(?)stack endsdata

37、 segmentresul dw ?data endscode segmentmain proc farassume cs:code,ds:data,ss:stackstart: push dssub ax,axpush axmov ax,datamov ds,axmov ax,5call factmov resul,axretfact procand al,aljne iiamov al,1retiia: push ax20dec alcall factx2: pop cxmul clretfact endpmain endpcode endsend start步骤:1、将程序输入,汇编并连

38、接成EXE文件。2、用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容。3、修改源程序,将阶乘数 3 改为本程序的最大允许值(是多少?),重新汇编连接之。用DEBUG运行并记录RESUL单元内容。4、若要在DOS命令下直接运行并显示阶乘结果(16进制形式),试修改程序并调试运行。(机动)实验报告:1、实验记录。2、自编程序。3、体会和意见。21实验十 音乐程序实验目的:1、掌握PC机发音原理及音乐程序编制方法。2、8088指令: IN,OUT,DIV,OR实验内容:一、发音程序。1、用DEBUG输入下列程序:MOV DX,4000HIN AL,61HAND AL,FCHLOP

39、: XOR AL,02HOUT 61H,ALMOV CX,0140HDEY: LOOP LOPDEC DXJNE LOPINT 21HINT 20H2、在DEBUG下运行此程序,改变延时时间常数,注意声音高低变化。二、音乐程序。1、输入,汇编,连接并运行下列程序:stacksg segment para stackdw 32 dup(?)stacksg endsdatasg segmenttiger db 0ah,0dh,two tiger。$tig_freq dw 2 dup(262,294,330,262)dw 2 dup(330,349,392)dw 2 dup(392,440,392,

40、349,330,262)dw 2 dup(294,196,262),0ffffhtig_time dw 10 dup(25),50,25,25,50dw 2 dup(12,12,12,12,25,25)dw 2 dup(25,25,50)datasg endscodesg segmentassume cs:codesg,ds:datasg,ss:stacksgstart: mov ax,datasgmov ds,axlea dx,tigermov ah,9int 21hlea si,tig_freqlea bp,ds:tig_timecall play22mov ah,4chint 21hpl

41、ay procfreq: mov di,sicmp di,0ffffhje end_plymov bx,ds:bpcall soundadd si,2add bp,2jmp freqend_ply: retplay endpsound procmov al,0b6hout 43h,almov dx,14hmov ax,4f38hdiv diout 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,alwait: mov cx,5000spkr_on: loop spkr_ondec bxjnz waitmov al,ahout

42、61h,alretsound endpcodesg endsend start2、修改程序,使它能演奏一首你所喜爱的歌曲。3、若歌曲中有休止符,怎么办?实验报告:1、实验记录和体会。2、自编程序。23实验十一 数码转换程序实验目的:1、掌握批处理文件的编制及使用。2、二进制和十进制数转换程序的编制和调试。3、8088指令: MUL,IMUL,DIV,IDIV,LEA。4、利用INT 21H 0AH号功能调用从键盘输入字符串。内容及步骤:一、自动汇编,连接及转换的批 处理文件:1、用EDIT或COPY CON ALK.BAT命令将下列程序输入:echo offmasm %1;echo if yo

43、u donot link,strike Ctrl-Break for quit;and either:pauselink %1;del *.objecho if the file is .exe,pleas strike Ctrl-Break for quit。and either:pauseexe2bin %1、exe %1、comdel %1、exe2、利用ALK.BAK文件汇编连接二个以前通过的源文件(COM型及EXE型)。二、双字节乘法程序:程序:disp macro messlea dx,messmov ah,9int 21hendmstack segment stackdb 256

44、 dup(0)stack endsdata segmentbuf db 7db ?db 15 dup(?)messa db pleas input number A ! :$messb db 0dh,0ah,pleas input number B ! :$linefd db 0dh,0ah,$bcd dd 1000000000,100000000,10000000dd 1000000,100000,10000,1000dd 100,10,1data endscode segmentassumecs: code,ds:data,ss:stackmain proc far24push dsxor

45、 bx,bxpush bxmov ax,datamov ds,axdisp messacall getpush bxdisp messbcall getdisp linefdpop axmul bxmov cx,10lea si,bcdlea di,buflop: call binecloop lopmov byte ptrdi,$disp bufretmain endpget proclea dx,bufmov ah,0ahint 21hlea si,buf+1xor bx,bxmov ah,bhmov cl,sinext: inc siadd bx,bxmov dx,bxadd bx,bx

46、add bx,bxadd bx,dxmov al,siand al,0fhadd bx,axdec cljne nextretget endpbinec procmov bl,025again: sub ax,word ptrsisbb dx,word ptrsi+2inc bljnc againadd ax,word ptrsiadc dx,word ptrsi+2add bl,2fhmov di,blinc diadd si,4retbinec endpcode endsend main步骤:1、输入,汇编并连接此程序。2、在DOS下运行此程序,根据提示输入二个乘数,检查并记录结果。3、思

47、考:本程序的输入范围是多少?若超过范围,会产生什么现象?试一试!三、根据上题,按下列要求选做一个修改程序 :1、带符号数16位乘法。2、无符号数16位除法。3、无符号数16位乘法,输入超过范围时能告警并要求重输。26实验十二 键盘和窗口程序实验目的:1、掌握利用INT 16H 2号功能调用实行键盘输入的方法。2、熟悉键盘的扫描码和ASCII码的关系。3、掌握利用INT 10H功能调用实现窗口功能的方法。实验内容:一、键盘输入程序1、程序:PRO_NAM SEGMENTASSUME CS:PRO_NAMORG 100HAGAIN: MOV AH,0INT 16HMOV BX,AXCALL BIN

48、IHEXMOV AH,2MOV dl,20hINT 21HMOV DL,BLMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HJMP AGAININT 20HBINIHEX PROC NEARMOV CH,4ROTATE: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30HCMP AL,3AHJL PRINTADD AL,7PRINT: MOV DL,ALMOV AH,2INT 21HDEC CHJNZ ROTATE27RETBINIHEX ENDPPRO_NAM ENDS

49、END AGAIN2、输入,汇编,连接此程序,并将它转变成。COM文件。3、运行此程序,观察并记录各个键的扫描码,ASCII码及对应字符。二、窗口程序:1、程序:code segmentassume cs:code,ss:codeorg 100hstart: mov ax,600hmov cx,0mov dx,184fhmov bh,7int 10hpos: mov ah,2mov dx,101ehmov bh,0int 10hmov cx,20get: mov ah,1int 21hcmp al,1bhjz exitloop getmov ax,601hmov cx,81ehmov dx,1031hmov bh,7int 10hjmp posexit: int 20hcode endsend start2、将此程序输入并转变成。COM文件。3、运行此程序,观察按不同键所产生的效果。4、此程序所产生的窗口效果有何缺陷?试修改之。实验报告:1、实验记录。2、自编程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报