微机原理课后例题程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;例4-1
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节STACKS ENDS
DATA SEGMENT
X DB 25
Y DB 32
Z DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA ;初始化DS
MOV DS, AX
MOV AL, X
MUL AL ;求X2
MOV BL, Y
ADD BL, BL ;Y+Y
ADD BL, Y ;Y+Y+Y
SUB AX, BX ;X^2-3Y
SHR AX, 1 ;(X^2-3Y)/ 2
;MOV Z, AX ;结果送Z
CALL SHOW
MOV AH,7 ;暂停
INT 21H
MOV AH, 4CH ;返回操作系统
INT 21H
;内存AX中的数据在屏幕上以十进制形式显示出来
SHOW:
XOR CX,CX
MOV BX,10
NX1:
XOR DX,DX ;余数清零
DIV BX ; AX除以10
OR DX,0E30H ; ASCII码调整
INC CX ; 计数器加1
PUSH DX ; 余数进栈
CMP AX,0
JNZ NX1
NX2: POP DX
MOV AH,2
INT 21H ;显示
LOOP NX2 ; CX不为0循环
RET
CODE ENDS
END START ;汇编结束
;例4-2
DATA SEGMENT
TABLES DB 30H,31H,32H,33H,34H,35H,36H,37H ;建立ASCII表DB 38H,39H,41H,42H,43H,44H,45H,46H
HEX DB 04H ;假定要查的十六进制数为4
ASCI DB ? ;存放查表的结果
DATA ENDS
STACK1 SEGMENT STACK
DW 20H DUP(0) ;建立堆栈段
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG, DS:DATA, SS:STACK1
BEING: MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET TABLES ;表首地址送BX
MOV AL, HEX ;表内位移量送AL
XLAT ;查表
MOV ASCI,AL ;结果送ASCI
MOV DL, AL
MOV AH, 2 ;调用DOS中断2号功能显示结果
INT 21H
MOV AH,7
INT 21H
MOV AH, 4CH ;返回操作系统
INT 21H
COSEG ENDS
END BEING
;例4-3奇校验程序,ASCII显示
DATA SEGMENT
MSG DB 10,13,'$'
X DB ?
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,1 ;读入一个键
INT 21H
MOV X,AL ;存原值
AND AL, 7FH ;最高位置"0"、其他位不变
;同时标志PF反映"1"的个数
JNP NEXT ;个数为奇数,不需处理,转移
OR AL, 80H ;个数为偶数,最高位置"1"、其他位不变NEXT: MOV Y,AL ;奇校验后的值
MOV BL, X
CALL SHOW
MOV BL, Y
CALL SHOW
MOV AH,4CH ;正常结束
INT 21H
;BL中字符的ASCII码显示
SHOW PROC
MOV DX,OFFSET MSG
MOV AH,09H
INT 21H ;回车换行
MOV CX, 8 ;8位
NEXT1: SHL BL,1 ;依次析出高位
MOV DL,30H
ADC DL,0 ;转换得ASCII码
MOV AH,2
INT 21H ;显示之
LOOP NEXT1
MOV DL,'B'
MOV AH,2 ;显示二进制数表示符
INT 21H
RET
SHOW ENDP
CODE ENDS
END START
4-4 DATA SEGMENT
X DB 3 ;假定X=3
Y DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV AL, X
CMP AL, 0 ;X和0比较
JGE BIGER ;X>=0跳转到BIGER
MOV AL, 0FFH ;X<0,-1送Y单元
MOV Y, AL
JMP NEXT ;跳过处理X>=0的程序段BIGER: JE EQUL ;X=0跳转到EQUL
MOV AL, 1 ;X>0,1送Y单元
MOV Y, AL
JMP NEXT ;跳过处理X=0的程序段EQUL: MOV Y, AL ;X=0,0送Y单元
NEXT: XOR AH,AH
MOV AL,Y
CALL SHOW
MOV AH,7 ;暂停
INT 21H
MOV AH, 4CH ;返回操作系统
INT 21H
;内存AX中的数据在屏幕上以十进制形式显示出来
SHOW:
XOR CX,CX
MOV BX,10
NX1:
XOR DX,DX
DIV BX
OR DX,0E30H
INC CX
PUSH DX
CMP AX,0
JNZ NX1
NX2: POP AX
INT 10H
LOOP NX2
RET
CODE ENDS
END START
例4-5求1+2+...+100
DATA SEGMENT