汇编实验报告(河北工业大学).doc
《汇编实验报告(河北工业大学).doc》由会员分享,可在线阅读,更多相关《汇编实验报告(河北工业大学).doc(52页珍藏版)》请在装配图网上搜索。
实验一 顺序与分支程序设计 一 实验目的 1 掌握顺序程序设计方法 2 掌握分支程序的结构及分支程序的设计 调试方法 2 学习数据传送及算术和逻辑运算指令的用法 3 熟悉在 PC 机上建立 汇编 连接 调试和运行汇编语言程序的过程 二 实验内容 1 有一字变量 BUF1 是以原码表示的有符号数 要求将其转换为反码和补码 分别存入 BUF2 和 BU F3 单元 并在屏幕上显示出来 源代码 DATA SEGMENT BUF1 DW 9348H BUF2 DW 4 DUP 0 0AH 0DH BUF3 DW 4 DUP 0 DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA BEGIN MOV AX DATA MOV DS AX MOV AX BUF1 ADD AX 0 JS NEXT MOV BUF2 AX MOV BUF3 AX JMP EEE NEXT AND AX 7FFFH NOT AX MOV BUF2 AX INC AX MOV BUF3 AX EEE MOV CX 0004H MOV DI OFFSET BUF2 MOV DX DI ADD DI 03 BBB MOV AX DX AND AX 000FH CMP AL 0AH JB QQQ ADD AL 07H QQQ ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04H SHR DX CL POP CX LOOP BBB MOV CX 0004H MOV SI OFFSET BUF3 MOV DX SI ADD SI 03H CCC MOV AX DX AND AX 000FH CMP AL 0AH JB DDD ADD AL 07H DDD ADD AL 30H MOV SI AL DEC SI PUSH CX MOV CL 04H SHR DX CL POP CX LOOP CCC MOV DX OFFSET BUF2 MOV AH 09H INT 21H MOV DX OFFSET BUF3 MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END BEGIN 运行结果 2 有两个两字节无符号数分别放在存储单元 A B 起始的缓冲器中 求其和 结果放在 A 起始 的缓冲区并在屏幕上显示 相加若有进位不存入存储单元 源代码 DATA SEGMENT A DB 34H 18H 2 DUP 0 B DB 56H 83H DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX MOV AL A MOV BL B ADD AL BL MOV AH A 1 MOV BH B 1 ADC AH BH MOV A AL MOV A 1 AH MOV CX 0004H MOV DI OFFSET A MOV DX DI ADD DI 03 NEXT MOV AX DX AND AX 000FH CMP AL 0AH JB QQQ ADD AL 07H QQQ ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04 SHR DX CL POP CX LOOP NEXT MOV DX OFFSET A MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END START 运行结果 3 在 BUF 和 BUF 1 BUF 2 单元分别放有一个无符号字节型数 编程序将其中最大数存入 MAX 单 元 并在屏幕上显示 源代码 STACK SEGMENT STACK DB 1024 DUP 0 STACK ENDS DATA SEGMENT BUF DB 70H 35H 1FH MAX DB 2 DUP DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK BEGIN MOV AX DATA MOV DS AX MOV AL BUF CMP AL BUF 1 JNB LP1 MOV AL BUF 1 LP1 CMP AL BUF 2 JAE LP2 MOV AL BUF 2 LP2 MOV CX 02H MOV DI OFFSET MAX MOV DL AL INC DI LP3 AND AL 0FH CMP AL 0AH JB LP4 ADD AL 07H LP4 ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04 SHR DL CL POP CX MOV AL DL LOOP LP3 MOV DX OFFSET MAX MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END BEGIN 运行结果 4 要求同上 只是比较的数为有符号数 源代码 STACK SEGMENT STACK DB 1024 DUP 0 STACK ENDS DATA SEGMENT BUF DB 98H 75H 32H MAX DB 2 DUP DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK BEGIN MOV AX DATA MOV DS AX MOV AL BUF CMP AL BUF 1 JG LP1 XCHG AL BUF 1 LP1 CMP AL BUF 2 JG LP2 XCHG AL BUF 2 LP2 MOV MAX AL MOV CX 02H MOV DI OFFSET MAX MOV DL DI INC DI LP3 MOV AL DL AND AL 0FH CMP AL 0AH JB LP4 ADD AL 07H LP4 ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04 SHR DX CL POP CX LOOP LP3 MOV DX OFFSET MAX MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END BEGIN 运行结果 6 从键盘上接收一位十进制数 X 计算 Y 值 并以十六进制形式显示出来 Y 按下列公式计算 6 2 5432Y 源代码 DATA SEGMENT X DB Y DB DATA ENDS STACK SEGMENT STACK DW 20H DUP STACK ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX l0 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H MOV AH 1 INT 21H SUB AL 30H MOV X AL CMP X 3 JZ l1 CMP X 4 JZ l2 CMP X 5 JZ l3 CMP X 6 JZ l4 CMP X 0 JZ l6 JMP l0 l1 MOV AL X MUL X ADD AL X MOV Y AL JMP l5 l2 MOV AL X MUL X SUB AL X SUB AL X MOV Y AL JMP l5 l3 MOV AL X MUL X MOV Y AL JMP l5 l4 MOV AL X MUL X MOV BL 2 DIV BL MOV Y AL l5 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H MOV DL Y MOV CL 4 SHR DL CL CMP DL 9 JLE l7 ADD DL 7 l7 ADD DL 30H MOV AH 2 INT 21H MOV DL Y AND DL 0FH CMP DL 9 JLE l8 ADD DL 7 l8 ADD DL 30H MOV AH 2 INT 21H JMP l0 l6 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 7 从键盘上接收两个一位十六进制数 X 和 Y 然后再输入一个 A D 之间的一个字符 按下列要 求计算 源代码 DATAS SEGMENT X DB Y DB Z DB S DB DATAS ENDS CODES SEGMENT ASSUME CS CODES DS DATAS START MOV AX DATAS MOV DS AX L0 MOV AH 1 INT 21H SUB AL 30H MOV X AL MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H MOV AH 1 INT 21H SUB AL 30H MOV Y AL MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H MOV AH 1 INT 21H MOV Z AL CMP Z A JZ L1 CMP Z B JZ L2 CMP Z C JZ L3 CMP Z D JZ L4 CMP Z Q JZ L7 L1 MOV AL X ADD AL Y MOV S AL JMP L6 L2 MOV AL X SUB AL Y MOV S AL CMP S 0 JS L5 JNS L6 L3 MOV AL X MUL Y MOV S AL JMP L6 L4 MOV AL X MOV BL Y MOV AH 0 DIV BL MOV S AL JMP L6 L5 NEG S JMP L6 L6 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H MOV DL S L9 ADD DL 30H MOV AH 2 INT 21H MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH INT 21H JMP L0 L7 MOV AH 4CH INT 21H CODES ENDS END START 运行结果 实验二 循环与子程序程序设计 一 实验目的 1 加深对循环结构的理解 2 掌握循环程序的设计方法 3 学习子程序的定义和调用方法 4 掌握子程序 子程序的嵌套 递归子程序的结构 5 掌握子程序设计 编制及调试 6 熟练掌握 DEBUG 的常用命令 学会用 DEBUG 调试程序 二 实验内容 1 编制程序计算 S 1 2 3 3 4 4 5 N N 1 直到 N N 1 大于 200 为止 并 将结果由屏幕上显示出来 源代码 DATA SEGMENT BUF DB S 1 2 3 3 4 4 5 N N 1 RES DW 4 DUP 0 DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX MOV DX OFFSET BUF MOV AH 09H INT 21H MOV DX 1 MOV BL 2 NEXT MOV AL BL INC BL MUL BL ADD DX AX CMP AX 200 JNA NEXT MOV CX 0004H MOV DI OFFSET RES ADD DI 03H NEXT1 MOV AX DX AND AX 000FH CMP AL 0AH JB NEXT2 ADD AL 07 NEXT2 ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04 SHR DX CL POP CX LOOP NEXT1 MOV DX OFFSET RES MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END START 运行结果 2 将从 3000H 内存单元开始的 100 个字节存储单元全部清 0 源代码 DATA SEGMENT ORG 3000H X DB 100 DUP DATA ENDS STACK SEGMENT STACK DB 10 DUP STACK ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK START MOV AX DATA MOV DS AX LEA SI X MOV CX 100 LP AND BYTE PTR SI 00H INC SI LOOP LP MOV AH 4CH INT 21H CODE ENDS END START 运行结果 3 编制在屏幕上显示九九乘法表的程序 源代码 DATA SEGMENT X DB 1 Y DB 1 Z DB 1 S DB YS DB TEN DB 10 DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX 装入段寄存器 L1 MOV AL X MUL Y MOV Z AL CALL SC INC Y MOV BL X CMP Y BL JA L2 JMP L1 内循环 L2 INC X CMP X 9H JA L3 MOV Y 1 MOV DL 0AH MOV AH 02H INT 21H MOV DL 0DH MOV AH 02H INT 21H 输出回车换行 JMP L1 外循环 L3 MOV AH 4CH INT 21H SC PROC 输出子程序 ADD Y 30H MOV DL Y MOV AH 02H INT 21H 输出 Y MOV DL X MOV AH 02H INT 21H 输出 X ADD X 30H MOV DL X MOV AH 02H INT 21H 输出 X MOV DL MOV AH 02H INT 21H 输出 MOV AX 0 MOV AL Z DIV TEN MOV S AL MOV YS AH cmp s 1 jb l10 ADD S 30H MOV DL S MOV AH 2 INT 21H 输出高位结果 ADD YS 30H MOV DL YS MOV AH 2 INT 21H 输出低位结果 输出 Z MOV DL MOV AH 02H INT 21H 输出一个空格 jmp l11 l10 ADD YS 30H MOV DL YS MOV AH 2 INT 21H 输出低位结果 MOV DL MOV AH 02H INT 21H 输出一个空格 MOV DL MOV AH 02H INT 21H l11 MOV AX 0 MOV AL X 30H SUB X 30H SUB Y 30H RET SC ENDP CODE ENDS END START 运行结果 4 编制在屏幕上显示用 组成的三角形的程序 源代码 DATA SEGMENT N DB NN DB I DB 1 DATA ENDS STACK SEGMENT DW 20 DUP STACK ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK START MOV AX DATA MOV DS AX MOV AH 1 INT 21H 输入一个数存入 AL MOV N AL 输入的数存入 N SUB N 30H MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H L10 MOV AL N SUB AL I MOV NN AL L2 CMP NN 1 JB L1 MOV DL MOV AH 02H INT 21H DEC NN JMP L2 循环输出 N I个空 格 L1 MOV BL I SHL BL 1 SUB BL 1 IX2 1 L14 MOV DL MOV AH 02H INT 21H DEC BL CMP BL 1 JB L3 JMP L14 L3 MOV AL N SUB AL I MOV NN AL L4 CMP NN 1 JB L5 MOV DL MOV AH 02H INT 21H DEC NN JMP L4 循环输出 N I个空格 L5 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H 输出回车换行 INC I MOV BL I CMP BL N JA L6 MOV BL 0 JMP L10 L6 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 5 设有五个字数据存放在以 BUF 为首地址的内存单元中 要求采用调用多个字数据相加的子程 序方法编程 和的低位字放在 RESULT 单元 和的高位字放在 RESULT 2 单元 并将结果显示在屏幕 上 源代码 STACK SEGMENT STACK DB 1024 DUP 0 STACK ENDS DATA SEGMENT BUF DW 0F101H 110DH 52H 100H 456H COUNT BUF 2 RESULT DW 4 DUP DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK WDADD PROC PUSH DI MOV AX 0 MOV DX 0 MOV DI OFFSET BUF NEXT2 ADD AX DI JNC NEXT1 INC DX NEXT1 ADD DI 2 LOOP NEXT2 POP DI RET WDADD ENDP SHOW PROC PUSH CX PUSH DI MOV CX 04H MOV DI OFFSET RESULT MOV BX AX ADD DI 07H BBB MOV AX BX AND AX 000FH CMP AL 0AH JB QQQ ADD AL 07H QQQ ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04 SHR BX CL POP CX LOOP BBB MOV CX 0004H CCC MOV AX DX AND AX 000FH CMP AL 0AH JB DDD ADD AL 07H DDD ADD AL 30H MOV DI AL DEC DI PUSH CX MOV CL 04H SHR DX CL POP CX LOOP CCC POP DI POP CX RET SHOW ENDP BEGIN MOV AX DATA MOV DS AX MOV CX COUNT CALL WDADD CALL SHOW MOV DX OFFSET RESULT MOV AH 09H INT 21H MOV AH 4CH INT 21H CODE ENDS END BEGIN 运行结果 实验三 算术运算与代码转换程序设计 一 实验目的 1 掌握算术运算程序的设计方法 2 掌握代码转换程序的设计方法 3 进一步掌握各种程序结构 4 熟练掌握和使用用 DEBUG 调试程序 二 实验内容 1 编制两个多字节整数加法和减法程序 并将结果按十六进制形式显示在屏幕上 源代码 DATA SEGMENT TABLE DW L1 L2 L3 L4 L5 BUF DB 32H 20H 12H NUM DB 04H DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP 0 STACK1 ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK1 START MOV AX DATA MOV DS AX MOV BL BUF MOV BH BUF 1 MOV CL BUF 2 CMP BL BH JA L1 CMP BH CL JA L2 JMP L3 L1 CMP BL CL JA L4 JMP L3 L2 MOV DL BUF 1 AND DL 0F0H SAR DL 1 SAR DL 1 SAR DL 1 SAR DL 1 ADD DL 30H MOV AH 02H INT 21H MOV DL BUF 1 AND DL 0FH ADD DL 30H MOV AH 02H INT 21H JMP L5 L3 MOV DL BUF 2 AND DL 0F0H SAR DL 1 SAR DL 1 SAR DL 1 SAR DL 1 ADD DL 30H MOV AH 02H INT 21H MOV DL BUF 2 AND DL 0FH ADD DL 30H MOV AH 02H INT 21H JMP L5 L4 MOV DL BUF AND DL 0F0H SAR DL 1 SAR DL 1 SAR DL 1 SAR DL 1 ADD DL 30H MOV AH 02H INT 21H MOV DL BUF AND DL 0FH ADD DL 30H MOV AH 02H INT 21H JMP L5 L5 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 2 编制程序实现二进制定点数与十进制数的 ASCII 码串之间转换 并将结果显示在屏幕上 源代码 DATA SEGMENT BIN1 DW 1101111011010101B DEC1 DB 6 DUP 0 DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP 0 STACK1 ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK1 START MOV AX DATA MOV DS AX MOV DX BIN1 MOV DI OFFSET DEC1 MOV CX 0 LOP1 PUSH CX MOV AX DX MOV DX 0 MOV CX 10 DIV CX XCHG AX DX ADD AL 30H MOV DI AL INC DI POP CX INC CX CMP DX 0 JNZ LOP1 DEC2 DEC DI MOV AL DI MOV DL AL MOV AH 2 INT 21H LOOP DEC2 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 3 编写程序计算从键盘输入两个不超过四位的十进制数的和 差 积 商 并以十进制形式输 出 源代码 DATA SEGMENT TISHI1 DB PLEASE ENTER THE FIRST NUMBER TISHI2 DB PLEASE ENTER THE FIRST NUMBER JIA DB JIAN DB CHENG DB CHU DB DENG DB YU DB A DB 10 B DW 10 C DW 10000 F DW 0H NUM1 DW 0H NUM2 DW 0H N DB 0H N1 DB 4H DA TA ENDS STACK1 SEGMENT STACK DW 30H DUP 0 STACK1 ENDS CODES SEGMENT ASSUME CS CODES DS DATA START MOV AX DATA MOV DS AX MOV DX OFFSET TISHI1 MOV AH 09H INT 21H LOOP2 MOV AX NUM1 MUL B MOV BX AX MOV AH 1 INT 21H CMP AL 0DH JE LOP1 MOV NUM1 BX MOV AH 0 SUB AL 30H ADD NUM1 AX JMP LOOP2 LOP1 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H MOV DX OFFSET TISHI2 MOV AH 09H INT 21H LOOP1 MOV AX NUM2 MUL B MOV BX AX MOV AH 1 INT 21H CMP AL 0DH JE LOP3 MOV NUM2 BX MOV AH 0 SUB AL 30H ADD NUM2 AX JMP LOOP1 LOP3 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H MOV N 0 MOV DX NUM1 MOV F DX LOP6 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOP7 MOV F AX JMP LOP6 LOP7 MOV CL N MOV CH 0 LOP16 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOP16 MOV DX NUM2 MOV F DX MOV N 0 MOV DX OFFSET JIA MOV AH 09H INT 21H LOOOP6 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOOP7 MOV F AX JMP LOOOP6 LOOOP7 MOV CL N MOV CH 0 LOOOP16 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOOP16 MOV DX OFFSET DENG MOV AH 09H INT 21H MOV N 0 LOOP3 MOV AX NUM1 ADD AX NUM2 MOV F AX LOOP4 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP5 MOV F AX JMP LOOP4 LOOP5 MOV CL N MOV CH 0 LOOP0 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP0 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H MOV N 0 MOV DX NUM1 MOV F DX LOP61 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOP71 MOV F AX JMP LOP61 LOP71 MOV CL N MOV CH 0 LOP161 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOP161 MOV DX NUM2 MOV F DX MOV N 0 MOV DX OFFSET JIAN MOV AH 09H INT 21H LOOOP61 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOOP71 MOV F AX JMP LOOOP61 LOOOP71 MOV CL N MOV CH 0 LOOOP161 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOOP161 MOV DX OFFSET DENG MOV AH 09H INT 21H MOV N 0 MOV N 0 MOV AX NUM1 SUB AX NUM2 MOV F AX AND AX 10000000B CMP AX 10000000B JNE LOOP6 NEG F LOOP6 MOV DX 0 MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP7 MOV F AX JMP LOOP6 LOOP7 MOV CL N MOV CH 0 LOOP16 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP16 MOV DL 0AH 输出换行和回车 MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H MOV N 0 MOV DX NUM1 MOV F DX LOP62 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOP72 MOV F AX JMP LOP62 LOP72 MOV CL N MOV CH 0 LOP162 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOP162 MOV DX NUM2 MOV F DX MOV N 0 MOV DX OFFSET CHENG MOV AH 09H INT 21H LOOOP62 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOOP72 MOV F AX JMP LOOOP62 LOOOP72 MOV CL N MOV CH 0 LOOOP162 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOOP162 MOV DX OFFSET DENG MOV AH 09H INT 21H MOV N 0 MOV AX NUM1 MUL NUM2 DIV C PUSH DX MOV F AX MOV N 0 LOOP8 MOV DX 0 MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP9 MOV F AX JMP LOOP8 LOOP9 MOV CL N MOV CH 0 LOOP17 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP17 MOV N 0 POP F LOOP10 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP11 MOV F AX JMP LOOP10 LOOP11 MOV AL N CMP AL 4H JE LOOP20 MOV AL 4H SUB AL N MOV CL AL MOV CH 0 LOOP19 MOV DX 0 MOV AH 2 INT 21H LOOP LOOP19 LOOP20 MOV CL N MOV CH 0 LOOP18 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP18 MOV DL 0AH MOV AH 2 INT 21H MOV DL 0DH MOV AH 2 INT 21H MOV N 0 MOV DX NUM1 MOV F DX LOP64 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOP74 MOV F AX JMP LOP64 LOP74 MOV CL N MOV CH 0 LOP164 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOP164 MOV DX NUM2 MOV F DX MOV N 0 MOV DX OFFSET chu MOV AH 09H INT 21H LOOOP64 MOV DX 0H MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOOP74 MOV F AX JMP LOOOP64 LOOOP74 MOV CL N MOV CH 0 LOOOP164 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOOP164 MOV DX OFFSET DENG MOV AH 09H INT 21H MOV N 0 MOV AX NUM1 MOV DX 0 DIV NUM2 PUSH DX MOV F AX MOV N 0 LOOP15 MOV DX 0 MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP12 MOV F AX JMP LOOP15 LOOP12 MOV CL N MOV CH 0 LOOP21 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP21 MOV DX OFFSET YU MOV AH 09H INT 21H POP F MOV N 0 LOOP13 MOV DX 0 MOV AX F DIV B PUSH DX INC N CMP AX 0H JE LOOP14 MOV F AX JMP LOOP13 LOOP14 MOV CL N MOV CH 0H LOOP22 POP DX ADD DX 30H MOV AH 2 INT 21H LOOP LOOP22 MOV AH 4CH INT 21H CODES ENDS END START 运行结果 4 写程序把从键盘输入的四位十六进制数转换为压缩的 BCD 码 并显示输出 源代码 STACK SEGMENT STACK DB 16 DUP 0 STACK ENDS DATA SEGMENT MSG1 DB 0AH 0DH PLEASE INPUT AGAIN MSG2 DB 0AH 0DH BCD CODE MSG3 DB PLEASE INPUT YOU DATA 0AH 0DH DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK START MOV AX DATA MOV DS AX MOV DX OFFSET MSG3 MOV AH 09H INT 21H MOV AH 01H MOV CX 4 INPUT MOV AH 01H 输入字符 INT 21H CMP AL 30H JB REINPUT CMP AL 39H JA ZIMU SUB AL 30H JMP OK ZIMU AND AL 11011111B 字母转换 CMP AL 41H JB REINPUT CMP AL 46H JA REINPUT SUB AL 37H OK MOV AH 0 PUSH CX MOV CL 4 SHL BX CL ADD BX AX POP CX LOOP INPUT MOV AX DATA MOV DS AX MOV DX OFFSET MSG2 MOV AH 09H INT 21H BCD MOV AX BX MOV BX 10 MOV CX 0 S1 MOV DX 0 DIV BX PUSH DX INC CX CMP AX 0 JA S1 MOV BX 2 S2 POP AX PUSH CX MOV CX 4 S2 0 MOV DX 0 DIV BX PUSH DX LOOP S2 0 MOV CX 4 MOV AH 02H S2 1 POP DX ADD DL 30H INT 21H LOOP S2 1 MOV DL 20H INT 21H POP CX LOOP S2 JMP OK2 REINPUT MOV AX DATA MOV DS AX MOV DX 0 MOV AH 09H INT 21H JMP START OK2 MOV AX 4C00H INT 21H CODE ENDS END START 运行结果 5 编写一通用过程用来将十进制数 从键盘输入 转换为 P 从键盘输入 进制数 源代码 DATA SEGMENT STRING1 DB INPUT YOUR M STRING2 DB INPUT YOUR P RE DB 8 DUP 30H DATA ENDS STACK1 SEGMENT STACK DW 60H DUP 0 STACK1 ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK1 START MOV AX DATA MOV DS AX MOV DX OFFSET STRING1 MOV AH 09H INT 21H MOV AH 01H INT 21H AND AX 0000FH MOV DL 10 MUL DL MOV BX AX MOV AH 01H INT 21H AND AL 0FH CLC ADD BL AL ADC BH 0 MOV DL 0AH MOV AH 02H INT 21H MOV DL 0DH INT 21H MOV DX OFFSET STRING2 MOV AH 09H INT 21H MOV AH 01H INT 21H MOV DH AL SUB DH 30H MOV DL 0AH MOV AH 02H INT 21H MOV DL 0DH INT 21H MOV AX BX MOV BX 0001H MOV DI OFFSET RE LOP1 DIV DH ADD AH 30H MOV DI AH CBW ADD DI BX CMP AL 0 JA LOP1 MOV CX 08H MOV DI OFFSET RE CLC ADC DI CX LOP2 SUB DI BX MOV DL DI MOV AH 02H INT 21H LOOP LOP2 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 实验五 输入输出程序设计 一 实验目的 1 掌握输入输出程序的编写方法 2 熟悉系统功能调用的方法 3 熟悉动画程序的编写方法 二 实验内容 1 在 CRT 上每隔一秒连续显示字符 0 9 编程提示 为了使输出的字符之间有空格 在每一个循环中输出一个 0 9 的字符和一个空格 为了输出 0 9 置寄存器 BL 初值为 0 每循环一次使其增量 为了保证输出是十进制 增量后用 DAA 调整指 令 由于输出为一位十进制数 用 AND 0FH 指令屏蔽高 4 位 源代码 STACK SEGMENT STACK DB 1024 DUP 0 STACK ENDS CODE SEGMENT ASSUME CS CODE SS STACK START MOV BL 0 LP MOV DL 20H MOV AH 2 INT 21H MOV AL BL ADD AL 0 DAA AND AL 0FH MOV BL AL PUSH BX OR AL 30H MOV DL AL MOV AH 2 INT 21H MOV BX 3E8H LP2 MOV CX 176H 延时 1ms LP1 PUSHF POPF LOOP LP1 DEC BX JNZ LP2 POP BX INC BL JMP LP CODE ENDS END START 运行结果 2 用系统功能调用将 HELLO 由键盘输入 再从屏幕输出 HELLO 源代码 STACK SEGMENT STACK DB 1024 DUP 0 STACK ENDS DATA SEGMENT BUFF DB 6 7 DUP DATA ENDS INPUT MACRO BUFE MOV DX OFFSET BUFE MOV AH 0AH INT 21H ENDM PUTCHAR MACRO CHAR MOV DL CHAR MOV AH 02H INT 21H ENDM CODE SEGMENT ASSUME CS CODE DS DATA SS STACK START MOV AX DATA MOV DS AX INPUT BUFF 读取字符串 BUFF PUTCHAR 0DH PUTCHAR 0AH 光标另起一行 MOV CX 0003H NEXT PUTCHAR 2AH LOOP NEXT MOV CL BUFF 1 SUB CH CH MOV BX OFFSET BUFF 2 BEGIN MOV AL BX PUTCHAR AL INC BX LOOP BEGIN MOV CX 0003H NEXT1 PUTCHAR 2AH LOOP NEXT1 MOV AH 4CH INT 21H CODE ENDS END START 运行结果 3 编制在屏幕上画线的子程序 调用该子程序画一矩形 源代码 DATA SEGMENT COL Dw 50 ROW Dw 50 LENGTH Dw 100 COLOR Db 2 DATA ENDS STACK1 SEGMENT STACK DW 20 DUP 0 STACK1 ENDS CODE SEGMENT ASSUME CS CODE DS DATA SS STACK1 START MOV AX DATA MOV DS AX MOV AH 0 设置显示方式 MOV AL 12H INT 10H MOV DX ROW 画上面横线 MOV CX COL CALL PROC X MOV DX ROW 画左边竖线 MOV CX COL CALL PROC Y MOV DX ROW 画右边竖线 MOV CX COL ADD CX LENGTH CALL PROC Y MOV DX ROW 画下面横线 MOV CX COL ADD DX LENGTH CALL PROC X MOV AH 1 输入 INT 21H MOV AH 0 MOV AL 3 INT 10H MOV AH 4CH 结束 INT 21H PROC X PROC 画横线子程序 MOV BP LENGTH 线长 LOP1 MOV BH 0 置页号 INC CX 修改列号 MOV AL COLOR 取象素值 MOV AH 0CH 写象素 INT 10H DEC BP JNE LOP1 RET PROC X ENDP PROC Y PROC 划竖线子程序 MOV BP LENGTH LOP2 MOV BH 0 INC DX 修改行号 MOV AL COLOR MOV AH 0CH INT 10H DEC BP JNE LOP2 RET PROC Y ENDP CODE ENDS END START 运行结果 4 编制字母下落一行的子程序 调用该子程序使字母从屏幕顶部下落到底部 源代码 DATA SEGMENT TIMER DW 18 COLOR DB 00000100B STR1 DB NICE TO MEET YOU DATA ENDS STACK1 SEGMENT STACK DW 100 DUP STACK1 ENDS CODE SEGMENT ASSUME DS DATA CS CODE SS STACK1 ES DATA START MOV AX DATA MOV DS AX MOV ES AX MOV AH 0FH INT 10H PUSH AX MOV AL 03H MOV AH 00H INT 10H MOV AH 13H MOV AL 00H MOV BL COLOR MOV BP OFFSET STR1 MOV DH 10 MOV DL 20 MOV CX 5 INT 10H MOV CX 25 LOP1 PUSH CX CALL DOWN1 MOV AH 1 MOV CX 0 MOV DX 0 INT 1AH DELAY MOV AH 0 INT 1AH CMP DX TIMER JB DELAY POP CX LOOP LOP1 POP AX MOV AH 0 INT 10H MOV AH 4CH INT 21H DOWN1 PROC MOV AH 07H MOV AL 1 MOV BH 00000000B MOV CH 0 MOV CL 0 MOV DH 25 MOV DL 80 INT 10H RET DOWN1 ENDP CODE ENDS END START 运行结果 5 创建一磁盘文件 保存从键盘输入的字符串 源代码 STACK SEGMENT STACK stack DB 1024 DUP STACK ENDS DATA SEGMENT ASKNAME DB 0DH 0AH Enter the DB dest file name ASKCONT DB 0DH 0AH Enter the string DB as file content 0dh 0ah FILEBUF DB 62 63 DUP HAND D DW MSGMER DB 0DH 0AH 0AH DB Directory full 0DH 0AH MSGWER DB 0DH 0AH 0AH DB isk full 0DH 0AH MSGSUC DB 0DH 0AH 0AH DB Write file is Successful DB 0DH 0AH DATA ENDS DISPLY MACRO TEXT MOV DX OFFSET TEXT MOV AH 09H INT 21H ENDM CRHAND MACRO PATH ATTR MOV DX OFFSET PATH MOV CL ATTR XOR CH CH MOV AH 3CH INT 21H ENDM WRHAND MACRO HAND BUFF BYTE MOV BX HAND MOV DX OFFSET BUFF ADD DX 2 MOV CL BYTE XOR CH CH MOV AH 40H INT 21H ENDM CLHAND MACRO HAND MOV BX HAND MOV AH 3EH INT 21H ENDM CODE SEGMENT PROG PROC FAR ASSUME CS CODE DS DATA SS STACK PUSH DS MOV AX 0 PUSH AX MOV AX DATA MOV DS AX DISPLY ASKNAME MOV DX OFFSET FILEBUF MOV AH 0AH INT 21H MOV DI OFFSET FILEBUF 2 MOV BL FILEBUF 1 XOR BH BH MOV BYTE PTR BX DI 00H CRHAND FILEBUF 2 0 JC CRTERR MOV HAND D AX DISPLY ASKCONT MOV DX OFFSET FILEBUF MOV AH 0AH INT 21H WRHAND HAND D FILEBUF FILEBUF 1 JC WRITERR CLHAND HAND D DISPLY MSGSUC JMP EXIT CRTERR DISPLY MSGMER JMP EXIT WRITERR DISPLY MSGWER EXIT RET PROG ENDP CODE ENDS END PROG 运行结果 6 编写程序用设置系统时间 首先从键盘以十进制数形式输入时间 然后修改系统时间 并重新以十进制形 式显示时间 源代码 DATA SEGMENT CONST DW 1000 100 10 1 DATA ENDS CODE SEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX MOV BH 0 将光标定位在 35 12 MOV DH 12 MOV DL 35 MOV AH 2 INT 10H MOV AH 2CH 读系统时间 INT 21H MOV AH 01H 从键盘读入字符 INT 21H MOV BL AL MOV AH 01H 从键盘读入字符 INT 21H MOV CL AL MOV AH 01H 从键盘读入字符 INT 21H MOV BH AL MOV AH 01H 从键盘读入字符 INT 21H MOV CH AL MOV DL 0AH 输入换行 MOV AH 02H INT 21H MOV DL BL 输出小时的第一个数 MOV AH 02H INT 21H MOV DL CL 输出小时的第二个数 MOV AH 02H INT 21H MOV DL MOV AH 2 INT 21H MOV DL BH 输出分钟的第一个数 MOV AH 02H INT 21H MOV DL CH 输出分钟的第二个数 MOV AH 02H INT 2- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告 河北 工业大学
![提示](https://www.zhuangpeitu.com/images/bang_tan.gif)
关于本文