8088汇编上机题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;1、从键盘输入一个4位的十六进制数,统计该数所对应的二进制数中所包含“1”的个数,并输出。
ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENT
TEMP DW ?
MSG1 DB 13,10,"PLEASE INPUT A HEX NUMBER : $"
MSG2 DB 10,13,"THE HEX NUMBER HAVE $"
ANS DB " 1 $"
ERR DB 'BKADBKS'
H16 DW 16
DATA ENDS
STACK SEGMENT
DB 128 DUP (0)
TOS DB '$'
STACK ENDS
CODE SEGMENT
; 十六进制转换十进制
CONVERT PROC
MOV BL,10
MOV CX,0
L:
DIV BL
ADD AH,30H
INC CX
PUSH AX
MOV AH,0
CMP AL,0
JNZ L
O:
POP DX
MOV DL,DH
MOV DH,0
MOV AH,2
INT 21H
LOOP O
RET
CONVERT ENDP
;统计AX中1的个数,结果在BX中,用循环位移实现
COUNT PROC FAR
MOV CX,16
L3:
SHR AX,1
JNC P1
INC BL
P1:
LOOP L3
RET
COUNT ENDP
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOS
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV BX,0
MOV CX,4
GET:
MOV AH,1
INT 21H
MOV AH,0
CMP AL,'A'
JB CONT
SUB AL,7
CONT:
SUB AL,30H
PUSH AX
MOV AX,BX
MUL H16
POP BX
ADD BX,AX
LOOP GET
MOV AX,BX
CALL COUNT NEXT:
MOV DX,OFFSET MSG2
INT 21H
MOV AX,BX
CALL CONVERT
MOV DX,OFFSET ANS
MOV AH,9
INT 21H
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
;2、从键盘输入10个2位以内的数(例如:1,3,54,33,2,67,12,23,23,89 ), ;输出其中最大的数和最小的数。
ASSUME CS:CODE,DS:DATA,SS:STACK
DATA SEGMENT
MSG1 DB 'PELESA INPUT 10 NUM :$'
MSG2 DB 13,10,'THE MAX NUM IS $'
MSG3 DB 10,13,'THE MIN NUM IS $'
MAX DB 0
MIN DB 255
H10 DB 10
DATA ENDS
STACK SEGMENT
DB 128 DUP (0)
TOS DB '$'
STACK ENDS
CODE SEGMENT
;十进制输出函数
CONVERT PROC
MOV BL,10
MOV CX,0
L:
DIV BL
INC CX
PUSH AX
MOV AH,0
CMP AL,0
JNZ L
O:
POP DX
MOV DL,DH
MOV DH,0
MOV AH,2
INT 21H
LOOP O
RET
CONVERT ENDP
; 把输入的数与max和min比较,大小比较后选择换或不换START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOS
LEA DX,MSG1
MOV AH,9
INT 21H
MOV BX,0
GET:
MOV AH,1
INT 21H
CMP AL,13
JE OVER
CMP AL,' '
JE GETONE
SUB AL,30H
MOV DL,AL
MOV AL,BL
MUL H10
ADD AL,DL
MOV BL,AL
JMP GET
GETONE:
CMP BL,MAX