2022年2022年汇编语言程序设计实验 .pdf
目录目录 . 1实验一利用DEBUG 熟悉常用指令的使用 . 2一、实验目的. 2二、示例 . 2三、实验题 . 2实验二汇编程序和连接程序的使用. 6一、实验目的。. 6二、示例。 . 6三、实验题。. 8实验三顺序结构程序设计. 11一、实验目的. 11二、示例 . 11三、实验题 . 12四、实验报告. 15实验四循环结构程序设计. 16一、实验目的. 16二、示例 . 16三、实验题 . 18实验五分支结构程序设计. 21一、实验目的. 21二、示例 . 21三、实验题 . 22实验六子程序设计. 29一、实验目的. 29二、实验题 . 29名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 33 页 - - - - - - - - - 实验一利用DEBUG 熟悉常用指令的使用一、实验目的熟悉指令系统, 掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用 DEBUG 中的命令对指令进行反汇编,观察并了解机器代码。二、示例请分别用一条汇编语言指令完成如下功能:(过程略)。1.用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与AL 寄存器的内容相加,并把结果送到AL 中。ADD AL,BXSI 2.用位移量为0520H 的直接寻址方式把存储器中的一个字与3412H 相加,并把结果送回该存储单元。ADD WORF PTR 0520H,3412H 三、实验题1.调试、验证下列指令的结果,已知(DS) =2000H , (BX )=0100H , (SI)=0002H , (BP)=0200H, (SS)=2300H , (20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H,(21200)=2AH , (21201)=4CH , (21202)=B7H , (21203)=65H , (23204)=88H,说明各指令执行完后AX 寄存器的内容。 要求输入指令, 相应存储单元的内容要事先设置,单步P执行,观察执行结果。(设置存储器的值)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 33 页 - - - - - - - - - .MOV AX,1200H .MOV AX,BX .MOV AX,1200H .MOV AX,BX .MOV AX,1100BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 33 页 - - - - - - - - - .MOV AX,BXSI .MOV AX,1100BXSI .MOV AX,BP+SI+04 2、上机调试、 验证教材习题3.15。单步执行、 观察运行结果并与自己的判断进行比较。(1)1234 (2)4321 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 33 页 - - - - - - - - - (3)CFA0 (4)9D60 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 33 页 - - - - - - - - - 实验二汇编程序和连接程序的使用一、实验目的。熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。二、示例。试编写一程序,要求比较两个字符串STRING1 和 STRING2 所含字符是否相同,若相同则显示MATCH,若不相同则显示NO MATCH 。用串比较功能来完成程序所要求的功能。上机步骤如下:1、调用 EDIT.COM程序建立汇编语言源程序.ASM 建立好的源文件以EX_1.ASM 为文件名存盘DATA SEGMENT STRING1 DB Visual Basic STRING2 DB Visual Basic COUNT EQU $-STRING2 MESS1 DB MATCH!,13,10,$ MESS2 DB NO MATCH!,13,10,$ DATA ENDS code segment assumecs:code,ds:data,es:data mainproc far start: push ds subax,ax push ax movax,data movds,ax moves,ax ;main program movcx,count lea si,string1 lea di,string2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 33 页 - - - - - - - - - cld repzcmpsb jz mes1 movdx,offset mess2 jmp disp0 mes1:movdx,offset mess1 disp0: mov ah,9 int 21h exit: ret main endp code ends end start修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为: NO MATCH!修改前:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 33 页 - - - - - - - - - 修改后:三、实验题。1、上机完成以上示例程序。2、完成课堂例题,并用DEBUG 运行,观察结果。data segment X db 6 Y db ? data ends code segment assumecs:code,ds:data 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 33 页 - - - - - - - - - start: movax,data movds,ax moval,x mov y,5 addy,al mov ah,4ch int 21h code ends end start 程序:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 33 页 - - - - - - - - - 改变后:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 33 页 - - - - - - - - - 实验三顺序结构程序设计一、实验目的学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的 D 命令观察DB 、DW 、DD 存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。二、示例试问如下程序执行到exit 时,字单元A、B、D、D+1、D+2 中的内容各是什么?源程序如下:data segment a db10 b dw20 ddb 30,40,50 data ends code segment assume cs:code,ds:data start: moval,data movds,ax mov al,d+1 add al,d mov a,al mov al,d+1 add al,d+2 mov b,al addd,10 addd+1,20 addd+2,30 exit: mov ah,4ch int 21h code ends 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 33 页 - - - - - - - - - end start 阅读以上程序,运行程序并用debug 调试分析出结果。字单元 A:4C5A 。字单元 B:2B5A 。字单元 D:3C2B 。字单元 D+1:503C。字单元 D+2:0050。三、实验题1、 求表达式Y=A*X2+B*X+C 的值,已知 A、 B、 C 分别存放在DATAA 、 DATAB 、 DATAC字节单元, X 存放在 TABL 字节单元,结果Y 放入 RESULT 字单元。要求:在DEBUG 下多次修改X 的值,观察执行结果Y;修改原程序,从键盘上输入X 的值,观察执行结果Y。(见书 P471) data segment dataadb 1 databdb 3 datacdw 5 tabldb7 resultdw ? data ends code segment assumecs:code,ds:data 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 33 页 - - - - - - - - - start: movax,data movds,ax moval,tabl mul al muldataa movbx,ax moval,tabl muldatab addax,bx addax,datac movresult,ax exit: mov ah,4ch int 21h code ends end start 运行结果为16 进制的 4B,即 75,计算正确。在修改 X 值为 9 后,运算结果为71,即 113,计算正确。继续修改 X 值为 3,运行结果为17,即 23,计算正确。data segment dataadb 1 databdb 3 datacdw 5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 33 页 - - - - - - - - - tabldb ? resultdw ? data ends code segment assumecs:code,ds:data start: movax,data movds,ax mov ah,01 int 21h sub al,30h movtabl,al mul al muldataa push ax moval,tabl muldatab popbx addax,bx addax,datac movresult,ax exit: mov ah,4ch int 21h code ends end start 从键盘上输入X 值为 7,输出结果为4B。2、上机完成教材习题3.11(P108) ,写出正确结果。data segment tabledw 10,20,30,40,50 entrydw 3 data ends code segment ASSUME DS:data,cs:code start: movax,data movds,ax movbx,offset table 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 33 页 - - - - - - - - - addbx,entry mov ax,bx code ends end start AX=1E00H 。四、实验报告写出程序清单,记录运行结果;总结DEBUG 中 U、E、D、T、G命令的功能。U命令的功能:将主存内容按照机器代码形成汇编指令显示;E命令的功能:用于修改主存内容;D命令的功能:显示主存单元的内容;T命令的功能:每执行一条指令就显示运行结果;G命令的功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 33 页 - - - - - - - - - 实验四循环结构程序设计一、实验目的理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。二、示例1、单循环程序已知当前数据段中DADT1 和 DADT2开始分别存放若干字节数据,数据个数相同, 编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。【参考程序如下】DSEG SEGMENT ;定义段。DATA1 DBABCDEFG3 ;定义字符串赋值给变量。DATA2 DBABCDEF3G ;定义字符串赋值给变量。CNT DW8;定义变量。DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG START :MOVAX,DSEG ;赋值。MOVDS,AX MOVDL,31H ;赋值。LEASI,DATA1;取变量的偏移地址。LEADI,DATA2 ;取变量的偏移地址、首地址。MOVCX,CNT DECSI;SI自减。DECDI;DI自减。AGAIN: INCSI;自增。INCDI;进行比较。MOVAL,SI ;地址的内容赋值给AL 。CMPAL,DI ;进行比较。LOOPZ AGAIN;如果相等,循环到AGAIN。JZ DISP;若相等,则跳转到显示。DECDL ;DL 自减。DISP: MOVAH,2 ;赋值。INT 21H;中断语句。MOVAH,4CH INT 21H CSEG ENDS ENDSTART名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 33 页 - - - - - - - - - 输入相同数据时:DSEG SEGMENT ;定义段。DATA1 DBABCDEFGG ;定义字符串赋值给变量。DATA2 DBABCDEFGG ;定义字符串赋值给变量。CNT DW8;定义变量。DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG START :MOVAX,DSEG ;赋值。MOVDS,AX MOVDL,31H ;赋值。LEASI,DATA1;取变量的偏移地址。LEADI,DATA2 ;取变量的偏移地址、首地址。MOVCX,CNT DECSI;SI自减。DECDI;DI自减。AGAIN: INCSI;自增。INCDI;进行比较。MOVAL,SI ;地址的内容赋值给AL 。CMPAL,DI ;进行比较。LOOPZ AGAIN;如果相等,循环到AGAIN。JZ DISP;若相等,则跳转到显示。DECDL ;DL 自减。DISP: MOVAH,2 ;赋值。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 33 页 - - - - - - - - - INT 21H;中断语句。MOVAH,4CH INT 21H CSEG ENDS ENDSTART三、实验题课堂实验内容:教材习题5.2 ,习题 5.17 。5.2 :DATAS SEGMENT ;输入数据段代码。DATAS ENDS STACKS SEGMENT ;输入堆栈段代码。STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ;定义段。START : MOV AX,DATAS MOV DS,AX MOV CX,2;定义循环次数。MOV AH,1;中断,从键盘输入字符。INT 21H MOV DL,AL ;把AL 赋值给 DL 。DEC DL ;DL 自减。MOV AH,2 ;中断指令,显示单个字符。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 33 页 - - - - - - - - - INT 21H S: INC DL ;自增 1,CX自减 1,CX不为 0则继续循环。MOV AH,2 INT 21H DEC CX JNZ S ;输入代码段代码。MOV AH,4CH INT 21H CODES ENDS ENDSTART 输入 k,前导字符j ,后续字符l ,输出 jkl ,正确。5.17 :DATAS SEGMENT ;输入数据段代码。MEM DB 4 DUP (?);定义数组。DATAS ENDS STACKS SEGMENT ;输入堆栈段代码。STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START : MOV AX,DATAS MOV DS,AX MOV AX,2A49H ;给AX赋值。LEA BX,MEM ;把数组 MEM 的首地址赋值给BX。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 33 页 - - - - - - - - - MOV CH,4;给CH赋值。即循环次数。S: MOV DX,AX ;把AX的值赋给 DX。MOV CL,4 ;给CL 赋值。即移位位数。AND DX,000FH ;相与,取出最低位。ADD DX,30H CMP DX,3AH JL NEXT ;如果小于则跳转到NEXT 。ADD DX,07H;如果大于就把DX加7。NEXT: MOV BX,DX ;把DX赋值给 BX下地址的内容,即数组。INC BX;BX自增 1。ROR AX,CL ;将AX循环右移 CL 位。DEC CH;CH自减。JNZ S ;如果不为 0则跳转。MOV AH,4CH INT 21H CODES ENDS ENDSTART 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 33 页 - - - - - - - - - 实验五分支结构程序设计一、实验目的掌握条件转移指令的使用方法及指令对标志寄存器中各标志位的影响;掌握标志位和转移指令之间的关系;会用条件转移指令和无条件转移指令设计多分支结构程序;掌握设置断点调试程序的方法。二、示例简单分支结构判断方程ax2+bx+c=0是否有实根,若有实根则将字节变量tag 置 1,否则置0(假设a、b、c 均为字节变量,表达-127+127 的数据)。当 a=1,b=3,c=1时有实根。程序如下:运行结果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 33 页 - - - - - - - - - 当 a=1,b=1,c=1时有实根。程序如下:三、实验题名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 33 页 - - - - - - - - - (1)教材习题5.21。程序如下:data segment array dw x,y,z data ends code segment assume cs:code,ds:data start : mov ax,data mov ds,ax mov cx,0 mov si,0 mov di,2 call bj mov si,0 mov di,4 call bj mov si,2 mov di,4 call bj cmp cl, 3 jnz show mov cl,2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 33 页 - - - - - - - - - show: add cx,30h mov ah,02h mov dl,cl int 21h mov ah,4ch int 21h bj: mov ax,ds:arraysi mov bx,ds:arraydi cmp ax,bx jz xd ret xd:inc cx ret code ends endstart 三个数都相等时的运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 33 页 - - - - - - - - - 三个数中有两个数相等的运行结果:三个数都不相等时的运行结果:(2) 已知 DATAX 和 DATAY 单元各存放一个带符号字节数据,从键盘上接收加 ()、 减 ()、乘( * )或除( / )符号,然后完成相应运算,结果存入RLT单元。程序如下:data segment datax db 4h datay db 5h rlt db 1 dup (?) data ends code segment assume cs:code,ds:data start : mov ax,data 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 33 页 - - - - - - - - - mov ds,ax mov bl,datax mov bh,datay mov ah,01h int 21h cmp al,+ je jiafa cmp al,- je jianfa cmp al,* je chf cmp al,/ je chufa chufa: mov al,bl sub ah,ah div bh mov bl,al jmp q5 chf: mov al,bh mul bl 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 33 页 - - - - - - - - - mov bl,al jmp q5 jianfa: sub bl,bh jmp q5 jiafa: add bl,bh q5: mov al,bl mov cl,4 shr al,cl add al,30h cmp al,39h jbe xianshi1 add al,07h xianshi1: mov dl,al mov rlt,al mov ah,02h int 21h mov al,bl and al,0fh add al,30h cmp al,39h jbe xianshi2 add al,07h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 33 页 - - - - - - - - - xianshi2: mov dl,al mov rlt,al mov ah,02h int 21h mov ah,4ch int 21h code ends endstart 运行结果:加:减:乘:除:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 33 页 - - - - - - - - - 实验六子程序设计一、实验目的掌握子程序的设计方法;理解子程序调用与返回指令的执行过程及堆栈的变化情况;掌握子程序调用过程中主程序与子程序间的参数传递方式,掌握现场的保护与恢复方法,会编制嵌套子程序。二、实验题1、上机验证教材例6.3 十进制到十六进制数的转换,仿照示例进行调试。decihex segment assume cs:decihex main proc far repeat1:call decibin call crlf call binihex call crlf jmp repeat1 main endp decibin proc near mov bx,0 newchar: mov ah,1 int 21h sub al,30h jl exit 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 33 页 - - - - - - - - - cmp al,9d jg exit cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar exit: ret decibin endp binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 33 页 - - - - - - - - - printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret binihex endp crlf proc near mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h ret crlf endp decihex ends end main 2、教材习题6.7 。datas segment 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 33 页 - - - - - - - - - cj db 76,69,84,90,73,88,99,63,100,80 s6 db 0 s7 db 0 s8 db 0 s9 db 0 s10 db 0 datas ends codes segment assumecs:codes,ds:datas start: mov ax,datas mov ds,ax lea si,cj ; 目标地址传送指令mov cx,10; 循环十次s:;(子程序部分)mov al,si cbw mov bl,10 div bl; 取个位数sub al,6 mov bl,al mov bh,0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 33 页 - - - - - - - - - inc s6bx ; 加1指令,跳转到下一个地址里面inc si loop s; 对子程序进行循环mov ah,4ch int 21h codes ends end start 堆栈指针和栈顶由inc加 1 指令,跳转到下一个地址里面,从而使程序进行了循环运算。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 33 页 - - - - - - - - -