实验一
实验目的和要求
实验目的:
1. 掌握汇编语言语法格式以及汇编程序的编辑、汇编、链接和执行的开发全过程。
2. 掌握汇编语言分支,循环程序的设计。
实验要求
1. 修改一个有语法错误的汇编语言源程序。
2. 设计汇编程序实现数据的查找、统计,代码转换及屏幕显示等功能。
改错后的代码
改错后的代码:
;FILENAME EXA131.ASM
.486
DATA SEGMENT USE16;SEGMENT关键词有缩写
SUM DB ?,?;
;用于保存结果的二进制数
;显示的字符串
MESG DB '25+9='
DB 0,0,'$'
N1 DB 9,0F0H
N2 DB 25;根据N1和16行可知该数据类型为DB
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET SUM
;计算N1+N2,并将结果保存到SUM处
MOV AH,N1
MOV AL,N2
ADD AH,AL
MOV [BX],AH
;计算N1+N2,并将结果保存到SUM处
;CHANG功能为转发字符串
CALL CHANG
;CHANG功能为转发字符串
;调用DOS显示功能
MOV AH,9
MOV DX,OFFSET MESG;是MESG不是MEST
INT 21H
;调用DOS显示功能
;调用DOS退出功能
MOV AH,4CH
INT 21H
;调用DOS退出功能
CHANG:
LAST:
CMP byte ptr [BX],10;指定内存单元大小
JC NEXT
SUB byte ptr [BX],10;指定内存单元大小
INC byte ptr [BX+7];指定内存单元大小
JMP LAST
NEXT:
MOV AH,[BX]
MOV [BX+8],AH
ADD byte ptr [BX+7],30H
ADD byte ptr [BX+8],30H
RET
CODE ENDS
END BEG
实验二
从BUF单元开始存有一个字符串(长度<255),编程实现统计该串字符中的ASCII码在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕上。
代码:
486
DATA SEGMENT USE16
BUF DB 'LIUJIAHAOBBBCCDEFZHMXACDF' ; 实质: 统计BCDE的个数
COUNT EQU $-BUF ; COUNT: 字符串长度
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX, DATA
MOV DS, AX
MOV BL, 0 ; BL=满足条件的字符个数,初始值为0
MOV SI, 0 ; BUF数组下标,初始值为0
MOV CX, COUNT
CALL COMPARE ; 调用比较函数
CALL DISP
EXIT: MOV AH, 4CH
INT 21H
COMPARE PROC
LAST: CMP BUF[SI], 42H
JC NEXT ; 小于 42H, JUMP NEXT
CMP BUF[SI], 45H
JA NEXT ; 大于 45H, jump
INC BL ; 8位
NEXT: INC SI
LOOP LAST
RET ; 子程序返回
COMPARE ENDP
DISP PROC ; 以二进制输出,BL中存储的就是二进制
MOV CL, 8 ; 显示位8位
LAST: MOV DL, '0'
RCL BL, 1 ; 带进位的循环左移
JNC NEXT ; C=0,则跳转直接显示
MOV DL, '1'
NEXT: MOV AH, 2
INT 21H
LOOP LAST
MOV DL, 'B'
MOV AH, 2
INT 21H
RET
DISP ENDP
CODE ENDS
END BEG