《微机原理与汇编语言程序设计》实验指导书 data segment strl db 'this is the first word string.','$' str2 db 'this is the second word string.','$' data ends stack segment sta db 50 dup (? topl equ length sta stack ends code segment assume cs:code,ds:data,ss:stack main proc far start: push ds ;将DS入栈 mov ax, 00h ;AX置零 push ax :将0入栈 ⅢoV ax,data :初始化DS mov ds, ax mov ah,08h :键盘输入一个字符 int 21h ;字符在AL中 cmp al,'f' jz displ cmp al,'s' jz disp2 jmp do displ: mov dx,offset strl :显示字符串 mov ah,09h int 21h jmp do disp2: mov dx,offset str2 mov ah, 09h int 21h do mov ax,4c00h ;返回D0S int 21h main endp code ends end start 4)设计一数据块间的搬移程序: 程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。 STACK SEGMENT STACK DW 64DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START:MOV CX.0010H MOV SI,3100H 13
《微机原理与汇编语言程序设计》实验指导书 13 data segment str1 db 'this is the first word string.','$' str2 db 'this is the second word string.','$' data ends stack segment sta db 50 dup (?) top1 equ length sta stack ends code segment assume cs:code,ds:data,ss:stack main proc far start: push ds ;将 DS 入栈 mov ax, 00h ;AX 置零 push ax ;将 0 入栈 mov ax, data ;初始化 DS mov ds, ax mov ah, 08h ;键盘输入一个字符 int 21h ;字符在 AL 中 cmp al, 'f' jz disp1 cmp al, 's' jz disp2 jmp do disp1: mov dx, offset str1 ;显示字符串 mov ah, 09h int 21h jmp do disp2: mov dx, offset str2 mov ah, 09h int 21h do : mov ax, 4c00h ;返回 DOS int 21h main endp code ends end start 4) 设计一数据块间的搬移程序: 程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成为目的数据块)。 STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX,0010H MOV SI,3100H
《微机原理与汇编语言程序设计》实验指导书 MOV DI,3200H CMP SI,DI JA A2 ADD SI,CX ADD DI,CX DEC SI DEC DI A1: MOV AL,[SI] MOV [DI],AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS END START 实验步骤 (1)按实验流程图设计编写实验程序。(自主编程,不使用上述现成的程序) (2)输入程序并检查无误,经汇编、连接后产生正确的可执行文件。 (3)用E命令在以SI寄存器内容(具体值见程序)为起址的单元中连续填入16个数。 (4)运行实验程序。 (⑤)用D命令查看DI寄存器内容为起址的单元中的数据是否与SI单元中数据相同。 (6)试改变SI、DI的取值(修改程序),观察在三种不同的数据块情况下程序的运行。 六、实验报告 1)说明程序的功能,使用方法。 2)说明上机调试的步骤,出现的问题,对问题的分析与解决。 3) 画出程序框图,打印程序清单与执行过程清单。 实验七循环程序设计实验 一、实验目的 1)学习将一个十六位二进制数数转换成四位十六进制数显示的编程方法。 14
《微机原理与汇编语言程序设计》实验指导书 14 MOV DI,3200H CMP SI,DI JA A2 ADD SI,CX ADD DI,CX DEC SI DEC DI A1: MOV AL,[SI] MOV [DI],AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS END START 实验步骤 (1)按实验流程图设计编写实验程序。(自主编程,不使用上述现成的程序) (2) 输入程序并检查无误,经汇编、连接后产生正确的可执行文件。 (3) 用 E 命令在以 SI 寄存器内容(具体值见程序)为起址的单元中连续填入 16 个数。 (4) 运行实验程序。 (5) 用 D 命令查看 DI 寄存器内容为起址的单元中的数据是否与 SI 单元中数据相同。 (6) 试改变 SI、DI 的取值(修改程序),观察在三种不同的数据块情况下程序的运行。 六、实验报告 1) 说明程序的功能,使用方法。 2) 说明上机调试的步骤,出现的问题,对问题的分析与解决。 3) 画出程序框图,打印程序清单 与执行过程清单。 实验七 循环程序设计实验 一、 实验目的 1) 学习将一个十六位二进制数数转换成四位十六进制数显示的编程方法
《微机原理与汇编语言程序设计》实验指导书 2)熟悉循环程序的设计方法。 3)学习乘法指令的用法。 二、实验环境 1)硬件:PC微机 2)软件:DOS系统、EDT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、 实验内容 实现两个字节相乘的程序,并转换成十六进制数显示出结果。 23H×20H=? 四、实验要求 1)分析题目,确定算法,画出程序框图。 2)实验前准备好汇编语言源程序。 3)实验要求在PC机上进行。 五、编程提示 I)两个数据放在数据段的DAT1和DAT2中。 2)计算结果转换成ASCI码显示,因此结果的高四位要拼成3,用NT21H的02H功能 (DL=显示字符)显示结果。 3)参考程序 DATA SEGMENT DAT1 DB 25H 25H DAT2 DB 30H 30H SUM1 DW ?,? SUM2 DB 10DUP('0') TABLE DB0,1','2','3,4,’5,’6',’7,'8,’9 DB’A,B,'C,'D,'E,'F DATA ENDS STACK SEGMENT ST1 DB 100 DUP ('SA') TOPI EQU STI LENGTH STI STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR START:MOV AX,DATA :初始化数据段 MOV DS,AX MOV AX,STACK :初始化堆栈段 15
《微机原理与汇编语言程序设计》实验指导书 15 2) 熟悉循环程序的设计方法。 3) 学习乘法指令的用法。 二、实验环境 1)硬件:PC 微机 2)软件:DOS 系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、 实验内容 实现两个字节相乘的程序,并转换成十六进制数显示出结果。 23H20H=? 四、实验要求 1) 分析题目,确定算法,画出程序框图。 2) 实验前准备好汇编语言源程序。 3) 实验要求在 PC 机上进行。 五、编程提示 1) 两个数据放在数据段的 DAT1 和 DAT2 中。 2) 计算结果转换成 ASCII 码显示,因此结果的高四位要拼成 3,用 INT 21H 的 02H 功能 (DL=显示字符)显示结果。 3) 参考程序 DATA SEGMENT DAT1 DB 25H ; 25H DAT2 DB 30H ; 30H SUM1 DW ?,? SUM2 DB 10 DUP ('0') TABLE DB '0','1','2','3','4','5','6','7','8','9' DB 'A','B','C','D','E','F' DATA ENDS STACK SEGMENT ST1 DB 100 DUP ('SA') TOP1 EQU ST1 LENGTH ST1 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR START: MOV AX, DATA ;初始化数据段 MOV DS, AX MOV AX, STACK ;初始化堆栈段
《微机原理与汇编语言程序设计》实验指导书 MOV SS,AX MOV AX,100 MOV SP,AX XOR AX,AX MOV BL,DAT1 :取乘数 MOV AL,DAT2 :取被乘数 MOV SI, OFFSET TABLE :取ASCII码表首地址 MOV DI,OFFSET SUM2 :取结果地址 MUL BL MOV SUM1.AX :存乘积二进制结果 convert l binary number in bx to hex 转换成16进制 mov BX,AX ;结果送BX MOV CX,4 :转换4位数 HEX16:PUSH CX :保护CX MOV CL,4 :循环左移4位 ROL BX,CL MOV AL,BL AND AL,OFH :保留低四位 PUSH BX :保护BX MOV BX,SI :ASCII码表首地址送BX XLAT :转换成ASCII码 MOV [DI],AL :存结果的ASCII码 INC DI ;地址加一 POP BX :恢复BX中待转换的数 POP CX :弹出CX的计数值 LOOP HEX16 :未转换完,继续 display results on screen MOV AH.02H :调用D0S的02H功能显示 MOV CX.04H :显示数据的位数 MOV DI,OFFSET SUM2 :送出待显示数据的首地址 D0N2: MOV DL,[DI] :显示数据送DL INT 21H :显示 Inc DI :显示数据所在存储单元加一 LOOP DON2 :未显示完,继续 MOV AH,4CH :返▣D0S INT 21H RET MAIN ENDP CODE ENDS END START 六、实验报告 1)说明程序结构及功能。 16
《微机原理与汇编语言程序设计》实验指导书 16 MOV SS, AX MOV AX, 100 MOV SP, AX XOR AX, AX MOV BL, DAT1 ;取乘数 MOV AL, DAT2 ;取被乘数 MOV SI, OFFSET TABLE ;取 ASCII 码表首地址 MOV DI, OFFSET SUM2 ;取结果地址 MUL BL MOV SUM1,AX ;存乘积二进制结果 ; convert binary number in bx to hex 转换成 16 进制 mov BX, AX ;结果送 BX MOV CX, 4 ;转换 4 位数 HEX16:PUSH CX ;保护 CX MOV CL, 4 ;循环左移 4 位 ROL BX, CL MOV AL, BL AND AL, 0FH ;保留低四位 PUSH BX ;保护 BX MOV BX, SI ;ASCII 码表首地址送 BX XLAT ;转换成 ASCII 码 MOV [DI], AL ;存结果的 ASCII 码 INC DI ;地址加一 POP BX ;恢复 BX 中待转换的数 POP CX ;弹出 CX 的计数值 LOOP HEX16 ;未转换完,继续 ; display results on screen MOV AH, 02H ;调用 DOS 的 02H 功能显示 MOV CX, 04H ;显示数据的位数 MOV DI, OFFSET SUM2 ;送出待显示数据的首地址 DON2: MOV DL, [DI] ;显示数据送 DL INT 21H ;显示 INC DI ;显示数据所在存储单元加一 LOOP DON2 ;未显示完,继续 MOV AH, 4CH ;返回 DOS INT 21H RET MAIN ENDP CODE ENDS END START 六、实验报告 1) 说明程序结构及功能
《微机原理与汇编语言程序设计》实验指导书 2)说明入口参数与出口参数,参数的输人与输出方法。 3)说明调试过程中遇到的问题及解决的方法。 4) 画出程序框图,打印源程序清单与执行结果。 实验八子程序设计实验 一、实验目的 1)学习将一个十六位二进制数数转换成四位十六进制数显示的编程方法。 2)熟悉子程序的设计方法。 3)学习乘法指令的用法。 二、实验环境 1)硬件:PC微机 2)软件:DOS系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 实现多字节非组合BCD码相加的程序,并显示出结果。 1111111+999999=? 四、实验要求 1)分析题目,确定算法,画出程序框图。 2)实验前准备好汇编语言源程序。 3)实验要求在PC机上进行。 五、编程提示 1)两个数据放在数据段的DAT1和DAT2中。 2)加法子程序:采用BCD码运算,用带进位位的指令ADC,后面要跟加法校正AAA。 3)显示子程序:用NT21H的02H功能(DL=显示字符)显示结果。 4)参考程序 DATA SEGMENT DAT1 DB 01H,01H,01H,01H,01H.01H,01H,01H :11111111 DAT2 DB 09H,09H,09H,09H,09H,09H,09H,09H :99999999 SUM DB 20DUP(?) DATA ENDS STACK SEGMENT STI DB100 DUP ('SA') TOP1 EQU ST1 LENGTH ST1 STACK ENDS 17
《微机原理与汇编语言程序设计》实验指导书 17 2) 说明入口参数与出口参数,参数的输人与输出方法。 3) 说明调试过程中遇到的问题及解决的方法。 4) 画出程序框图,打印源程序清单与执行结果。 实验八 子程序设计实验 一、实验目的 1) 学习将一个十六位二进制数数转换成四位十六进制数显示的编程方法。 2) 熟悉子程序的设计方法。 3) 学习乘法指令的用法。 二、实验环境 1)硬件:PC 微机 2)软件:DOS 系统、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE 三、实验内容 实现多字节非组合 BCD 码相加的程序,并显示出结果。 1111111+999999=? 四、实验要求 1) 分析题目,确定算法,画出程序框图。 2) 实验前准备好汇编语言源程序。 3) 实验要求在 PC 机上进行。 五、编程提示 1) 两个数据放在数据段的 DAT1 和 DAT2 中。 2) 加法子程序:采用 BCD 码运算,用带进位位的指令 ADC,后面要跟加法校正 AAA。 3) 显示子程序:用 INT 21H 的 02H 功能(DL=显示字符)显示结果。 4) 参考程序 DATA SEGMENT DAT1 DB 01H,01H,01H,01H,01H,01H,01H,01H ;11111111 DAT2 DB 09H,09H,09H,09H,09H,09H,09H,09H ;99999999 SUM DB 20 DUP (?) DATA ENDS STACK SEGMENT ST1 DB 100 DUP ('SA') TOP1 EQU ST1 LENGTH ST1 STACK ENDS