备份

815历年真题程序总结

2007.编写程序,将一个32位数扩大16倍。(DX:AX)

DATA SEGMENT
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,0020H
MOV AX,1010H
MOV CX,4
L1:  SHL AX,1 
	 RCL DX,1
	 LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
     END START

2008.设计程序,统计AX中1的个数。

DATA SEGMENT
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	mov ax,0fh
	mov cx,10H
	MOV BX,00H
L1: rcr ax,1
	adc	 Bx,00h
	LOOP L1
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2009.假设内存单元中有三个字节变量啊a、b和c,编写程序,判断它们是否构成一个三角形,若能,CF=1,否则,CF为0。

DATA SEGMENT
	a db 03h;定义变量
	b db 04h
	c db 05h
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	
	mov al,a;暂存数据
	mov bl,b
	mov cl,c
	
	mov dl,al;cmp1 c<a+b?
	add dl,bl
	cmp cl,dl
	JNC ENDA ;c>a+b 则无借位 
	
	mov dl,Bl;cmp2 a<b+c?
	add dl,Cl
	cmp Al,Dl
	JNC ENDA 
	
	mov dl,al;cmp3 b<a+c?
	add dl,Cl
	cmp Bl,dl
	JNC ENDA

	mov dl,59h;屏幕输出Y
	MOV ah,02h
	int 21h
	MOV AH,4CH
    INT 21H	
ENDA:
	mov dl,4eh;屏幕输出N
	MOV ah,02h
	int 21h
	MOV AH,4CH
	INT 21H
CODE ENDS
     END START

2010A.将ELEMS中的100个字节的数据位置颠倒过来(即第一个字节的第100个字节的内容交换,第二个字节和第9个字节的内容交换……)

DATA SEGMENT
elems db 50 dup(01h),50 dup(02h) 
	b db 04h
	c db 05h
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	lea si,elems
	mov di,si
	add di,99;指向最后一个单元
	mov cx,50
again:
	mov al,[si];al作桥梁
	xchg al,[di]
	xchg al,[si]
	inc si
	dec di
	loop again	
ENDA:
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2010B.将STRING中的字符串反序。方法一:

DATA SEGMENT
elems  db 'ABCDEFG$'
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	lea si,elems
	mov di,si
	add di,7
	mov cx,4
again:
	mov al,[si]
	xchg al,[di]
	xchg al,[si]
	inc si
	dec di
	loop again	
ENDA:
	mov dl,elems
	MOV AH,02H
    INT 21H
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2011A.试编一个程序,求出2~65535之内的所有能被8整除的数。

DATA SEGMENT
ELEMS DW 10000 DUP(?)
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	LEA SI,ELEMS ;获取ELEMS地址
	mov cx,0ffffh ;最大范围
	mov ax,0
L1:	add ax,8	;能被8整除,也就是8的整数倍
	cmp ax,cx	;即小于65535的倍数,所以每次+8
	jle L2		;只要比65535小的数被存到ELEMS
	JG  ENDA	;跳转结束
L2:	MOV [SI],AX	;将刚才满足范围内的数存入
	ADD SI,2	;si+2为下一次存放做准备
	JMP L1		;回到程序
ENDA:			;结束
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2011B.试编一个程序,求出2~65535之内的所有能被16整除的数。

DATA SEGMENT
ELEMS DW 10000 DUP(?)
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	LEA SI,ELEMS ;获取ELEMS地址
	mov cx,0ffffh ;最大范围
	mov ax,0
L1:	add ax,10h	;能被16整除,也就是16的整数倍
	cmp ax,cx	;即小于65535的倍数,所以每次+8
	jle L2		;只要比65535小的数被存到ELEMS
	JG  ENDA	;跳转结束
L2:	MOV [SI],AX	;将刚才满足范围内的数存入
	ADD SI,2	;si+2为下一次存放做准备
	JMP L1		;回到程序
ENDA:			;结束
	MOV AH,4CH
   	 INT 21H
CODE ENDS
     END START

2012.编写一个程序,它以二进制形式显示EAX中的32位数据。

DATA SEGMENT
ELEMS DW 10000 DUP(?)
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	mov eax,0f0f0H;
	MOV cX,10H
L1:	shL eax,1
	JC dis1
	mov dl,30H
	jmp dis2
dis1: mov dl,31H
dis2: MOV AH,02H
	  INT 21H
	  loop L1
enda: MOV AH,4CH
      INT 21H
CODE ENDS
     END START

2014.编写程序,计算如下函数值:在这里插入图片描述

DATA SEGMENT
x db 6
S dw ?
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	mov al,x
	cmp al,0
	jl x1
	cmp al,0AH
	jle x2
	mov cl,4
enda: imul cl
	  mov S,ax
	  MOV AH,4CH
      INT 21H
x1: mov cl,2
	jmp enda
x2: mov cl,3
	jmp enda
CODE ENDS
     END START

2015.编写一个程序,先提示“Input Number:0-9”,然后下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error”,继续等待输入数字。

DATA SEGMENT
STRING db 'Input Number:0~9',0AH,'$'
errora db 'Error',0AH,'$'
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	lea DI,STRING
	MOV DX,DI
	MOV AH,09H
	INT 21H
l1:	mov ah,01h
	int 21h
	cmp al,30h
	jb x
	cmp al,39h
	ja x
enda: MOV AH,4CH
      INT 21H 
x:	lea DI,errora
	MOV DX,DI
	MOV AH,09H
	INT 21H
	jmp l1
CODE ENDS
     END START

2016.编写一个程序,从键盘读取键值并把键盘数据存储到数组BUF,直到回车键按下为止。按下回车键后,将政哥哥字符串加上“$”符,然后使用DOS中观的09H功能调用在屏幕上显示字符串。

DATA SEGMENT
BUF db ?
ENDF DB '$'
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	LEA DI,BUF
L1:	mov ah,01h
	int 21h
	cmp AL,0DH
	je DIS
	MOV [DI],AL
	inc DI
	JMP L1
DIS:MOV AL,24H
	MOV [DI],AL
	LEA DI,BUF 
	MOV DX,DI
	MOV AH,09H
	INT 21H		
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2018.有一首地址为BUP的字数组,长度为10,试编写完整程序,球盖数组最大数与最小数之差,结果存F-TOTAL单元中。

DATA SEGMENT
BUP DW 0,1,2,3,4,5,6,7,8,9
TOTAL DW ?
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	LEA DI,BUP
	MOV DX,[DI]
	MOV AX,[DI]
	MOV CX,10
M1:	MOV BX,[DI+2];MAX
	CMP AX,BX
	JAE M2
	MOV AX,BX
	ADD DI,2	
M2: LOOP M1
    MOV CX,9	
M3:	MOV BX,[SI+2];min
	CMP DX,BX
	JBE M4
	MOV DX,BX
	ADD DI,2
M4: LOOP M3	
ENDA:
	SUB AX,DX
	LEA SI,TOTAL
	MOV [SI],AX
;TEST:测试程序已注释掉
;	ADD AL,30H 
;	MOV DL,AL
;	MOV AH,02H
;	INT 21H
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START

2019.计算一个数组中负数的个数。设数组中第一个元素是数据的个数,第二个元素用来存放计算结果,即负数的个数,数组中的数据从第三个元素开始存放。

DATA SEGMENT
buf db 81h,0ah,81h,0ah,81h,0ah,81h,0ah,81h,0ah
DATA ENDS
CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
	lea si,buf
	mov di,si
	mov bl,10 ;元素个数
	mov dl,0       ;负数的个数
	mov cx,10
L1:	mov al,[si]  
	INC SI       
	SHL Al,1
	jnc L2
	inc dl
L2:	loop L1	
	mov cx,10
L3:	mov al,[si-2]
	mov [si],al
	dec si
	LOOP L3
	mov [di],bl
	mov [di+1],dl
;	mov al,24h  测试代码
;	mov [di+12],al
;	mov dx,di
;	mov ah,09h
;	int 21h
	MOV AH,4CH
    INT 21H
CODE ENDS
     END START
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值