微机基础学习知识原理实验报告.doc
!-微机原理实验报告班级: 学号: 姓名: 指导教师: 实验日期: 实验一实验题目 1.Debug命令及汇编指令和寻址方法 完成日期 12周-周三 一、 实验目的与要求: 1、掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序;2、掌握8086CPU指令的功能,体会寄存器的作用;3、了解数据在指令中的存放方式和内存操作数的几种寻址方式;4、了解指令的执行过程。 二 实验内容:1、设堆栈指针SP=1000H,AX=4000H,BX=8000H;请编一程序段将AX和BX的内容进行交换。要求:用3种方法实现。2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。MOV BX,1000H 立即寻址,将1000H送给BX MOV AX,BX 寄存器寻址,将BX内容送AX MOV AX,BX 寄存器间接寻址,将DS:BX内存单元内容送AXMOV AX,20BX 寄存器相对寻址,将DS:BX+20内存单元内容送AX当时DS数据段的值0B47H,每条指令执行后AX的值分别为4000H,1000H,1AEBH,BB00H。将指令中”bx”修改为dx执行指令,结果:AX值BB00H,1000H,错误,错误。错误的原因是DX不为基址寄存器。、已知有如下程序段:MOV AX,3421HMOV CL,4在以上程序段的基础上,分别执行以下指令:起始时刻 CF=0,ZF=0,SF=0 CF SF ZFROL AX,CL AX=4213H 1 0 0 ROR AX,CL AX=1342H 0 0 0SHL AX,CL AX=4210H 1 0 0SHR AX,CL AX=0342H 0 0 0SAR AX,CL AX=0342H 0 0 0RCL AX,CL AX=4211H 1 0 0RCR AX,CL AX=2342H 0 0 0 4、设有以下部分程序段:TABLE DW 10H,20H,30H,40H,50H ENTRY DW 3 LEA BX,TABLE ADD BX,ENTRY MOV AX,BX 要求:(1)将以上程序段补充成为一个完整的汇编程序。2、编辑、调试并运行程序,记录在执行MOV AX,BX后AX的内容。DATA SEGMENT TABLE DW 10H,20H,30H,40H,50H ENTRY DW 4DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,TABLE ADD BX,ENTRY MOV AX,BX MOV AH,4CH INT 21H CODE ENDSEND START二、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):实验一答:方法一 :CODE SEGMENT ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H MOV CX,AX MOV AX,BX MOV BX,CX CODE ENDS END START 方法二 : CODE SEGMENT ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H XCHG AX,BX CODE ENDS END START方法三:CODE SEGMENT ASSUME CS:CODE START: MOV AX,4000H MOV BX,8000H PUSH AX PUSH BX POP AX POP BX CODE ENDS END START实验四:DATA SEGMENT TABLE DW 10H,20H,30H,40H,50H ENTRY DW 4DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,TABLE ADD BX,ENTRY MOV AX,BX MOV AH,4CH INT 21H CODE ENDSEND START三、 测试数据与实验结果(可以抓图粘贴) 编译成功连接成功,生成exe文件。 BX开始代表偏移量,即指向数组的第一个字节,在加上ENTRY,即加上4以后,BX即代表第五个字节,30H,所以AX中存放的是30H。四、 本次上机的体会或收获 通过这次上机操作,让我熟悉了再DEBUG环境下的汇编语言操作,进一步了解了汇编语言的编译连接和执行等过程。 实验中遇到的问题:开始在记事本中输入源程序时,保存时要加上后缀名.asm ,保存格式为所有文件,否则不能够进行编译,此外要注意所建立的文件和MASM、LINK软件都应该放在一个文件夹下。在输入程序时有些标点不能少,还有代表十六进制的H字符不能少;输出字符串时需要在字符串末尾加上$编译成功后在界面下输入MASM EX1 (EX1是文件名),几次回车后再输入LINK EX1,回车后即可生成可执行的EXE文件。这只是第一次做实验,我也只是刚刚接触到汇编语言的实际操作,后面还有很多次机会,我要好好把握,努力提高自己的水平,为以后的学习打下基础。实验二实验题目 分支与DOS中断功能调用程序设计实验 完成日期 12周-周三 一、 实验目的与要求:1. 掌握汇编语言的开发环境和上机过程2. 熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法3. 熟悉逻辑类指令用法4. 掌握传送类指令功能5.掌握顺序程序设计的基本方法二、 实验内容:1.求内存单元中所定义的两个字节变量的连续内容之和。要求用三种不同的方法实现,下面已给出一种方法,请自编出另两种方法的程序(提示:(1)用定义字的形式实现,(2)用直接寻址方式实现)2、计算表达式2*(X+Y-50)/Z的值的程序。3.拆字程序。将1000H的内容拆开,高4位送4001H低位,低4位送4002H低位。三、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):1. 源程序如下:方法一: DATA SEGMENTA DB 5CH,85H ;两字节运算数B DB 43H,0ABHDATA ENDSCODE SEGMENT ASSUME CS:CODE,ds:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,0 置位移量初值 MOV AL,ASI 取加数低位 ADD AL,BSI 两数相加 MOV ASI,AL 存回A单元 INC SI 调整位移量 MOV AL,ASI ;取加数高位 ADC AL,BSI 带进位加 MOV ASI,AL 存回A单元 MOV AH,4CH INT 21HCODE ENDS END START方法二:DATA SEGMENT A DB 5CH,85H ;两字节运算数 B DB 43H,0ABH DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,A ADD AX,B MOV A,AX MOV AH,4CH INT 21H方法三:CODE ENDS END STARTcode segmentassume cs:codestart:mov ax,855ch mov bx,0ab43h add al,bl adc ah,bh mov ah,4ch int 21h code ends end start2. 源程序如下:data segment x dw 0033h y dw 0ab0ch z dw 0110h a dw ? b dw ? data endscode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax,x adc ax,y sbb ax,50 mov bx,2 imul bx idiv z mov a,ax mov b,dx mov ah,4ch int 21h code ends end start3. 源程序如下: data segmentorg 1000ha dw 12achorg 4001hb db ?c db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov ax,a mov b,ah mov c,al mov ah,4ch int 21hcode endsend start四、 测试数据与实验结果(可以抓图粘贴)实验1:方法一程序结果方法二程序结果:方法三程序结果:实验2程序结果:实验3程序结果:实验三实验题目 分支结构程序设计完成日期 12周-周五 1 实验内容:1、请编写一程序,实现将大写字母字符串转换成小写字母字符串。设字符串的首地址为STRING,字符串的长度在LEN单元内。3.从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。若输入为小写字母,显示“You Input a Lowercase Letter!”;若输入为大写字母,显示“You Input a Uppercase Letter!”; 若输入为数字,显示“You Input a Digit!”; 若输入为其它字符,显示“You Input Other Letter!”。二实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图): 源程序1: DATA SEGMENT STRING DB I AM A STUDENT!$ LEN EQU $-STRINGDATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOV BX,OFFSET STRING MOV CX,LENNEXT: MOV AL,BX CMP AL,A JB NEXT1 CMP AL,Z JA NEXT1 ADD AL,20H MOV BX,ALNEXT1:INC BX LOOP NEXT MOV AH,9 MOV DX,OFFSET STRING INT 21H MOV AH,4CH INT 21HCODE ENDS END START原程序三:数字09的ASCII码为30H39H;大写字母的ASCII码为41H5AH,小写字母的ASCII码为61H7AH。本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。(1) 程序框架DATA SEGMENTINFOR1 DB 0AH,0DH,Please Press any key to input a letter:$INFOR2 DB 0AH,0DH, You Input a lowercase letter! $INFOR3 DB 0AH,0DH,You input a uppercase letter! $INFOR4 DB 0AH,0DH,You input a digit! $INFOR5 DB 0ah,0dh, You input other letter! $DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET INFOR1MOV AH,09HMOV AH,1INT 21HCMP AL,0JB OTHERCMP AL,9JBE DIGITCMP AL, AJB OTHERCMP AL , ZJBE UPPERCMP AL, aJB OTHERCMP AL, zJBE LOWERJMP PENDLOWER: MOV DX,OFFSET INFOR2MOV AH,09HINT 21HJMP PENDUPPER: MOV DX,OFFSET INFOR3MOV AH,09HINT 21HJMP PENDDIGIT : MOV DX,OFFSET INFOR4MOV AH,09HINT 21HJMP PENDOTHER: MOV DX,OFFSET INFOR5MOV AH,09HINT 21HJMP PENDPEND: MOV AH,4CHINT 21HCODE EndSEND START三测试数据与实验结果(可以抓图粘贴)程序结果1:程序结果3:实验四实验题目 循环程序设计 完成日期 13周-周三 1 实验目的与要求:1. 掌握循环指令LOOP、LOOPZ、LOOPNZ的使用方法2. 掌握实现单重、多重循环程序设计、编写、调试和运行的方法。2 实验内容:1. 在数据段变量名为A的数据区内有10个字符,编写程序实现将这10个字符以相反顺序传送到附加段变量名为B的内存区中。 2、循环结构程序设计编写一个程序,将内存1000H开始的连续100个字节送往1050H开始的连续100个内存单元中。要求使用三种不同的方法(不用串操作指令、用单一的串操作指令、用带重复前缀的串操作指令),下面已给出一种实现方法,请给出另外两种实现方法的源程序清单:3. 数据段开始区域中,连续存放着10个无符号数,编程是先找出这10个数中最大的一个数,并将其存放到该数据区的后面。五、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):源程序1: data segment a db 1234567890 n equ $-a b db n dup(?) data endscode segment assume cs:code,ds:data,es:datastart:mov ax,datamov ds,axmov es,axlea si,alea di,badd di,nmov cx,nmove:mov al,simov es:di,alinc sidec diloop movemov ah,4chint 21hcode endsend start源程序2:方法一:带重复前缀的串操作指令DATASEGMENTORG1000H DB100 DUP(A)ORG 1050HDB100 DUP(B)DATAENDSCODESEGMENTASSUME DS:DATA,ES:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV SI,1000HMOV DI,1050HMOV CX,100CLDREP MOVSBMOV AH,4CHINT 21HCODEENDSENDSTART方法二:不带重复前缀的串操作指令DATASEGMENTORG1000H DB100 DUP(A)ORG 1050HDB100 DUP(B)DATAENDSCODESEGMENTASSUME DS:DATA,ES:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV ES,AX MOV SI,1000HMOV DI,1050HMOV CX,100CLDNEXT: MOVSB LOOP NEXTMOV AH,4CHINT 21HCODEENDSENDSTART方法三:不用串操作指令,而用MOV指令DATASEGMENTORG1000H DB100 DUP(A)ORG 1050HDB100 DUP(B)DATAENDSCODESEGMENTASSUME DS:DATA,ES:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV SI,1000HMOV DI,1050HMOV CX,100 NEXT: MOV AL,SI MOV DI,AL INC SI INC DI LOOP NEXTMOV AH,4CHINT 21HCODEENDSENDSTART源程序3:DATA SEGMENT xx DW 10, 0, 20, 15, 38, 236, 30, 45, 11, 49 MAX DW 0 DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOV AX, DATA MOV DS, AX MOV BX, OFFSET xx MOV CX, 10LOP: MOV AX, BX CMP AX, MAX JB L2MOV MAX, AXL2: INC BX INC BX LOOP LOP MOV AH, 4CH INT 21HCODE ENDSEND START三测试数据与实验结果(可以抓图粘贴)程序结果1:程序结果2:方法一:方法二:方法三:程序结果3:实验五实验题目DOS中断功能调用程序设计 完成日期 13周-周五 一实验目的与要求: 1.掌握DOS的基本命令: 2.了解指令过程;二:实验内容:1. 编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。源程序:2、编写一程序,实现从键盘输入一个字符,判断其是不是数字,如果是则请输出这个数字,如果不是,请输出“这不是一个数字”的英文信息(要求:能连续输入)。三实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):源程序1:code segment assume cs:codestart: mov ah,1 int 21h mov ah,4ch int 21h code ends end start源程序2:DATA SEGMENT MS1 DB IT IS A DIGIT$ MS2 DB IT IS NOT A DIGIT$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX NEXT: MOV DX,OFFSET MS2 MOV AH,1 INT 21H; CMP AL,0DH JZ EXITCMP AL, 0 JB NO CMP AL, 9 JA NO MOV DX,OFFSET MS1 NO: MOV AH,9 INT 21H JMP NEXT EXIT:MOV AH,4CH INT 21HCODE ENDS END START四测试数据与实验结果(可以抓图粘贴)程序结果1:程序结果2:
收藏
- 资源描述:
-
!-
《微机原理》
实
验
报
告
班级:
学号:
姓名:
指导教师:
实验日期:
实验一
实验题目 1.Debug命令及汇编指令和寻址方法 完成日期 12周-周三
一、 实验目的与要求:
1、掌握DEBUG的基本命令及其功能,学会用DEBUG调试程序;
2、掌握8086CPU指令的功能,体会寄存器的作用;
3、了解数据在指令中的存放方式和内存操作数的几种寻址方式;
4、了解指令的执行过程。
二 实验内容:1、设堆栈指针SP=1000H,AX=4000H,BX=8000H;请编一程序段将AX和BX的内容进行交换。要求:用3种方法实现。
2、分别执行以下指令,比较寄存器寻址,寄存器间接寻址和相对寄存器寻址间的区别。
MOV BX,1000H 立即寻址,将1000H送给BX
MOV AX,BX 寄存器寻址,将BX内容送AX
MOV AX,[BX] 寄存器间接寻址,将DS:BX内存单元内容送AX
MOV AX,20[BX] 寄存器相对寻址,将DS:BX+20内存单元内容送AX
当时DS数据段的值0B47H,每条指令执行后AX的值分别为4000H,1000H,1AEBH,BB00H。将指令中”bx”修改为dx执行指令,结果:AX值BB00H,1000H,错误,错误。错误的原因是DX不为基址寄存器。
3、已知有如下程序段:
MOV AX,3421H
MOV CL,4
在以上程序段的基础上,分别执行以下指令:起始时刻 CF=0,ZF=0,SF=0
CF SF ZF
ROL AX,CL AX=4213H 1 0 0
ROR AX,CL AX=1342H 0 0 0
SHL AX,CL AX=4210H 1 0 0
SHR AX,CL AX=0342H 0 0 0
SAR AX,CL AX=0342H 0 0 0
RCL AX,CL AX=4211H 1 0 0
RCR AX,CL AX=2342H 0 0 0
4、设有以下部分程序段:
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 3
┇
LEA BX,TABLE
ADD BX,ENTRY
MOV AX,[BX]
┇
要求:(1)将以上程序段补充成为一个完整的汇编程序。
2、编辑、调试并运行程序,记录在执行MOV AX,[BX]后AX的内容。
DATA SEGMENT
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 4
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,TABLE
ADD BX,ENTRY
MOV AX,[BX]
MOV AH,4CH
INT 21H
CODE ENDS
END START
二、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
实验一
答:方法一 :
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,4000H
MOV BX,8000H
MOV CX,AX
MOV AX,BX
MOV BX,CX
CODE ENDS
END START
方法二 :
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,4000H
MOV BX,8000H
XCHG AX,BX
CODE ENDS
END START
方法三:
CODE SEGMENT
ASSUME CS:CODE
START: MOV AX,4000H
MOV BX,8000H
PUSH AX
PUSH BX
POP AX
POP BX
CODE ENDS
END START
实验四:
DATA SEGMENT
TABLE DW 10H,20H,30H,40H,50H
ENTRY DW 4
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA BX,TABLE
ADD BX,ENTRY
MOV AX,[BX]
MOV AH,4CH
INT 21H
CODE ENDS
END START
三、 测试数据与实验结果(可以抓图粘贴)
编译成功
连接成功,生成exe文件。
BX开始代表偏移量,即指向数组的第一个字节,在加上ENTRY,即加上4以后,[BX]即代表第五个字节,30H,所以AX中存放的是30H。
四、 本次上机的体会或收获
通过这次上机操作,让我熟悉了再DEBUG环境下的汇编语言操作,进一步了解了汇编语言的编译连接和执行等过程。
实验中遇到的问题:
开始在记事本中输入源程序时,保存时要加上后缀名.asm ,保存格式为所有文件,否则不能够进行编译,此外要注意所建立的文件和MASM、LINK软件都应该放在一个文件夹下。在输入程序时有些标点不能少,还有代表十六进制的H字符不能少;输出字符串时需要在字符串末尾加上$
编译成功后在界面下输入MASM EX1 (EX1是文件名),几次回车后再输入LINK EX1,回车后即可生成可执行的EXE文件。
这只是第一次做实验,我也只是刚刚接触到汇编语言的实际操作,后面还有很多次机会,我要好好把握,努力提高自己的水平,为以后的学习打下基础。
实验二
实验题目 分支与DOS中断功能调用程序设计实验 完成日期 12周-周三
一、 实验目的与要求:
1. 掌握汇编语言的开发环境和上机过程
2. 熟悉运算类指令对标志位的状态影响以及标志位状态的表示方法
3. 熟悉逻辑类指令用法
4. 掌握传送类指令功能
5.掌握顺序程序设计的基本方法
二、 实验内容:
1.求内存单元中所定义的两个字节变量的连续内容之和。要求用三种不同的方法实现,下面已给出一种方法,请自编出另两种方法的程序(提示:(1)用定义字的形式实现,(2)用直接寻址方式实现)
2、计算表达式2*(X+Y-50)/Z的值的程序。
3.拆字程序。将1000H的内容拆开,高4位送4001H低位,低4位送4002H低位。
三、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
1. 源程序如下:
方法一:
DATA SEGMENT
A DB 5CH,85H ;两字节运算数
B DB 43H,0ABH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,ds:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV SI,0 置位移量初值
MOV AL,A[SI] 取加数低位
ADD AL,B[SI] 两数相加
MOV A[SI],AL 存回A单元
INC SI 调整位移量
MOV AL,A[SI] ;取加数高位
ADC AL,B[SI] 带进位加
MOV A[SI],AL 存回A单元
MOV AH,4CH
INT 21H
CODE ENDS
END START
方法二:
DATA SEGMENT
A DB 5CH,85H ;两字节运算数
B DB 43H,0ABH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,A
ADD AX,B
MOV A,AX
MOV AH,4CH
INT 21H
方法三:
CODE ENDS
END START
code segment
assume cs:code
start:mov ax,855ch
mov bx,0ab43h
add al,bl
adc ah,bh
mov ah,4ch
int 21h
code ends
end start
2. 源程序如下:
data segment
x dw 0033h
y dw 0ab0ch
z dw 0110h
a dw ?
b dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov ax,x
adc ax,y
sbb ax,50
mov bx,2
imul bx
idiv z
mov a,ax
mov b,dx
mov ah,4ch
int 21h
code ends
end start
3. 源程序如下:
data segment
org 1000h
a dw 12ach
org 4001h
b db ?
c db ?
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
mov ax,a
mov b,ah
mov c,al
mov ah,4ch
int 21h
code ends
end start
四、 测试数据与实验结果(可以抓图粘贴)
实验1:方法一程序结果
方法二程序结果:
方法三程序结果:
实验2程序结果:
实验3程序结果:
实验三
实验题目 分支结构程序设计
完成日期 12周-周五
1. 实验内容:
1、请编写一程序,实现将大写字母字符串转换成小写字母字符串。设字符串的首地址为STRING,字符串的长度在LEN单元内。
3.从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。若输入为小写字母,显示“You Input a Lowercase Letter!”;若输入为大写字母,显示“You Input a Uppercase Letter!”; 若输入为数字,显示“You Input a Digit!”; 若输入为其它字符,显示“You Input Other Letter!”。
二.实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
DATA SEGMENT
STRING DB I AM A STUDENT!$
LEN EQU $-STRING
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET STRING
MOV CX,LEN
NEXT: MOV AL,[BX]
CMP AL,A
JB NEXT1
CMP AL,Z
JA NEXT1
ADD AL,20H
MOV [BX],AL
NEXT1:INC BX
LOOP NEXT
MOV AH,9
MOV DX,OFFSET STRING
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
原程序三:
数字0~9的ASCII码为30H~39H;大写字母的ASCII码为41H~5AH,小写字母的ASCII码为61H~7AH。本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。
(1) 程序框架
DATA SEGMENT
INFOR1 DB 0AH,0DH,"Please Press any key to input a letter:$"
INFOR2 DB 0AH,0DH, "You Input a lowercase letter! $"
INFOR3 DB 0AH,0DH,"You input a uppercase letter! $"
INFOR4 DB 0AH,0DH,"You input a digit! $"
INFOR5 DB 0ah,0dh, "You input other letter! $"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET INFOR1
MOV AH,09H
MOV AH,1
INT 21H
CMP AL,0
JB OTHER
CMP AL,9
JBE DIGIT
CMP AL, A
JB OTHER
CMP AL , Z
JBE UPPER
CMP AL, a
JB OTHER
CMP AL, z
JBE LOWER
JMP PEND
LOWER: MOV DX,OFFSET INFOR2
MOV AH,09H
INT 21H
JMP PEND
UPPER: MOV DX,OFFSET INFOR3
MOV AH,09H
INT 21H
JMP PEND
DIGIT : MOV DX,OFFSET INFOR4
MOV AH,09H
INT 21H
JMP PEND
OTHER: MOV DX,OFFSET INFOR5
MOV AH,09H
INT 21H
JMP PEND
PEND: MOV AH,4CH
INT 21H
CODE EndS
END START
三.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果3:
实验四
实验题目 循环程序设计 完成日期 13周-周三
1. 实验目的与要求:
1. 掌握循环指令LOOP、LOOPZ、LOOPNZ的使用方法
2. 掌握实现单重、多重循环程序设计、编写、调试和运行的方法。
2. 实验内容:
1. 在数据段变量名为A的数据区内有10个字符,编写程序实现将这10个字符以相反顺序传送到附加段变量名为B的内存区中。
2、循环结构程序设计
编写一个程序,将内存1000H开始的连续100个字节送往1050H开始的连续100个内存单元中。要求使用三种不同的方法(不用串操作指令、用单一的串操作指令、用带重复前缀的串操作指令),下面已给出一种实现方法,请给出另外两种实现方法的源程序清单:
3. 数据段开始区域中,连续存放着10个无符号数,编程是先找出这10个数中最大的一个数,并将其存放到该数据区的后面。
五、 实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
data segment
a db 1234567890
n equ $-a
b db n dup(?)
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
lea si,a
lea di,b
add di,n
mov cx,n
move:
mov al,[si]
mov es:[di],al
inc si
dec di
loop move
mov ah,4ch
int 21h
code ends
end start
源程序2:
方法一:
带重复前缀的串操作指令
DATA SEGMENT
ORG 1000H
DB 100 DUP(‘A’)
ORG 1050H
DB 100 DUP(‘B’)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,1000H
MOV DI,1050H
MOV CX,100
CLD
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS
END START
方法二:
不带重复前缀的串操作指令
DATA SEGMENT
ORG 1000H
DB 100 DUP(‘A’)
ORG 1050H
DB 100 DUP(‘B’)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,1000H
MOV DI,1050H
MOV CX,100
CLD
NEXT: MOVSB
LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
方法三:
不用串操作指令,而用MOV指令
DATA SEGMENT
ORG 1000H
DB 100 DUP(‘A’)
ORG 1050H
DB 100 DUP(‘B’)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,ES:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV SI,1000H
MOV DI,1050H
MOV CX,100
NEXT: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
源程序3:
DATA SEGMENT
xx DW 10, 0, 20, 15, 38, 236, 30, 45, 11, 49
MAX DW 0
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET xx
MOV CX, 10
LOP:
MOV AX, [BX]
CMP AX, MAX
JB L2
MOV MAX, AX
L2: INC BX
INC BX
LOOP LOP
MOV AH, 4CH
INT 21H
CODE ENDS
END START
三.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果2:
方法一:
方法二:
方法三:
程序结果3:
实验五
实验题目DOS中断功能调用程序设计 完成日期 13周-周五
一.实验目的与要求:
1.掌握DOS的基本命令:
2.了解指令过程;
二:实验内容:
1. 编程实现由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。
源程序:
2、编写一程序,实现从键盘输入一个字符,判断其是不是数字,如果是则请输出这个数字,如果不是,请输出“这不是一个数字”的英文信息(要求:能连续输入)。
三.实验步骤与源程序(若是硬件,需有硬件连线图;若是软件,需有流程图):
源程序1:
code segment
assume cs:code
start: mov ah,1
int 21h
mov ah,4ch
int 21h
code ends
end start
源程序2:
DATA SEGMENT
MS1 DB IT IS A DIGIT$
MS2 DB IT IS NOT A DIGIT$
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
NEXT: MOV DX,OFFSET MS2
MOV AH,1
INT 21H;
CMP AL,0DH
JZ EXIT
CMP AL, 0
JB NO
CMP AL, 9
JA NO
MOV DX,OFFSET MS1
NO: MOV AH,9
INT 21H
JMP NEXT
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START
四.测试数据与实验结果(可以抓图粘贴)
程序结果1:
程序结果2:
展开阅读全文