微机软件实验最终无错版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一
MOV SI,3500 ;源地址
MOV DI,3510 ;结果地址
MOV BX,000A ;乘数 10
MOV CX,0004 ;计数
MOV AH,00 ;AH 清零
MOV AL,[SI] ;取被转换数
SUB AL,30 ;ASCII码变十进制数
IMUL BX ;高位(AX)*(BX)送AX
ADD AL,[SI+01] ;取下一位
SUB AL,30 ;ASCII码减30变十进制数
INC SI ;源地址指针+1
LOOP 2012 ;CX-1,若CX不等于零则继续
MOV [DI],AX ;若CX不等于零则存结果
INT 3
二、结果分析
当输入为学号后四位的时候,00221,结果为dd
实验二
一、源程序
MOV SI,3500 ;源地址
MOV DI,3508 ;结果地址
MOV AX,[SI] ;取被加数
ADD AX,[SI+04] ;加法计算
MOV [DI],AX ;取加数
MOV AX,[SI+02]
ADC AX,[SI+06]
MOV [DI+2],AX
INT 3
二、结果与分析
输入加数和被加数,结果为00 15 ac 7f H
改变加数和被加数,输出变化,
(2)D3500
073f:00 98 09 89 97 55 56 00 32
结尾为33447799h +22118899h=55 56 00 32h (3)D3500
073F
12 34 56 78 5456 78 AA AA AA AA 00
结果为:78563412H+32547698H=AAAAAAAAH
实验二,(2)
求数据块的最小值和最大值
一、源代码
DATA SEGMENT ;定义数据段
BUFFER DB 10,22,33,-80,127,-76,0,90,-45,60,-1 ;定义数组COUNT EQU $-BUFFER
MINVAL DB ? ;分配字节
MAXVAL DB ?
DATA ENDS ;数据段定义结束
STACK SEGMENT PARA STACK 'STACK' ;定义堆栈
STA DB 100 DUP(?) ;100字节栈空间
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE, DS:DATA,ES:DATA,SS:STACK START PROC fAR
PUSH DS ;标准序
MOV AX, 0
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA BX, BUFFER ;设置bx为数组其实地址
MOV CH, 0 ;为ch赋0值
MOV CL, COUNT
INC BX ;bx加一
MOV AL, [BX] ;数组第一个待比较数字给al
MOV MINVAL, AL
MOV MAXVAL, AL
INC BX ;bx加一
DEC CX ;cx-1
AGAIN: MOV AL, [BX] ;当前位置数据给al
CMP AL, MINVAL ;比较al与minval
JE NEXT;两数相等,执行next
JG A1
MOV MINVAL, AL
JMP NEXT ;无条件转移到next
A1: CMP AL, MAXVAL ;比较al与maxval
JL NEXT
MOV MAXVAL, AL
NEXT: INC BX ;bx+1
DEC CX
JNE AGAIN
RETF ;返回调用点
START ENDP ;过程结束
CODE ENDS
END START
二、结果分析
得到最大值7fh,(127),最小值b0h(-80)更换数据,得到不同结果
实验三
(一)、键盘输入小写字母,显示器显示大写字母
一、源程序
CSEG SEGMENT ;定义cseg段
ASSUME CS:CSEG
MAIN PROC FAR
START: PUSH DS ;标准序,以返回操作系统
MOV AX,0 从键盘读一字符并显示在屏幕上
PUSH AX
BEGIN: MOV AH,1
INT 21H
CMP AL,'a' ,若输出低于a则停止
JB STOP
CMP AL,'z'
JA STOP
SUB AL,20H
MOV DL,AL
MOV AH,2 ;显示一个dl中的字符
INT 21H
JMP BEGIN 无条件转移到begin
STOP: RET
MAIN ENDP
CSEG ENDS ;代码段结束
END START
三、结果分析
在dosbox中输入c:\> wj31.exe ,然后随机输入小写字母
(2)、采用DOS功能调用设计源程序十进制加法和算式显示程序一、源程序
DSEG SEGMENT ;定义数据段dseg
ADDOP1 DD 1234 ;定义双字变量赋值1234
JIAHAO DB '+','$'
DENGHAO DB '=','$'
TEN DW 10
SUM DD ? ;定义双字变量
DSEG ENDS ;定义结束
ESEG SEGMENT ;定义数据段
ADDOP2 DD 6789
ESEG ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?) ;定义堆栈段,100字节
STACK ENDS
CODE SEGMENT
ASSUME DS:DSEG,CS:CODE,ES:ESEG
START: MOV AX, DSEG
MOV DS,AX
MOV AX,ESEG ;将被加数赋给ax
MOV ES,AX ;将ax内容赋值给es
MOV AX,WORD PTR ADDOP1 ;使addop1为字变量,赋值给ax
ADD AX, WORD PTR ADDOP2
MOV WORD PTR SUM,AX ;赋值
MOV AX,WORD PTR ADDOP1+2 ;相加赋值
ADC AX,WORD PTR ADDOP2+2 ;addop2+2为字变量与ax相加MOV WORD PTR SUM+2,AX
MOV BX,WORD PTR ADDOP1+2 ;被加数的高两位赋值给bx
CALL DISPLAY ;调用display
MOV BX,WORD PTR ADDOP1
CALL DISPLAY
MOV AH,09H
MOV DX,OFFSET JIAHAO ;显示字符串jiahao
INT 21H
MOV BX,WORD PTR ADDOP2+2
CALL DISPLAY
MOV BX,WORD PTR ADDOP2
CALL DISPLAY
MOV AH,09H
MOV DX,OFFSET DENGHAO ;显示字符串denghao
INT 21H