微机软件实验最终无错版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档