您的位置:首页 > 其它

汇编复习Test5

2017-06-09 10:08 225 查看
1.编一个程序,从键盘输入一个不长于120个字符的串(回车键结束),然后将其中的字母字符显示输出(在显示输出前,补充输出回车换行)。
DATAS SEGMENT
BUF DB 120 DUP(?)
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,offset BUF
AG:
MOV AH,01H
INT 21H
CMP AL,0Dh
JE EXIT
MOV [SI],AL
inc si
JMP AG
EXIT:
MOV [SI],AL
MOV AH,02H
MOV SI,offset BUF
AG1:

mov dl,[si]
INT 21H
CMP AL,0Dh
JE EXIT1
inc si
JMP AG1
EXIT1:

MOV AH,4CH
INT 21H
CODES ENDS
END START
2.编一个程序完成从键盘上输入一个4位的16进制数,并以八进制形式显示出来。
DATAS SEGMENT
num dw 1000h,100h,10h,1h
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,OFFSET num
MOV CX,4
MOV BP,0
input:
MOV AH,01H
INT 21H

CMP AL,39H
JBE less
SUB AL,7H
less:
SUB AL,30h
MOV AH,0
MOV BX,[SI]
mul BX
ADD BP,AX
ADD SI,2
loop input

rol bp,1
mov dx,bp
and DL,01H
add dl,30h
mov ah,02h
INT 21H
mov cx,5
output:
push cx
mov cl,3
rol bp,cl
mov dx,bp
and DL,07H

add dl,30h

mov ah,02h
INT 21H
pop cx
loop output
MOV AH,4CH
INT 21H
CODES ENDS
END START
3. 在首地址为DATA的字数组中,存放了100H个16位无符号数,编一个子程序,找出其中的最小数,并存入AX寄存器中返回。
4. 已知数据块BUF中存放3个字节数据,是编写一个程序判断这3个数的关系:如果3个数相等,则显示“All  equal.”;如果有任意两个数相等,则显示“Only two equal.”;如果三个数各不相同,则显示“All three different from each other.”。
DATA SEGMENT
BUF DB 1,2,3 ;三个数据
DISP1 DB 'ALL EQUAL$'
DISP2 DB 'ONLY TWO equal$'
DISP3 DB 'ALL THREE DIFFRENT FROM EACH OTHER$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
main proc far
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF ;地址指针
MOV AX,[SI]
CMP AX,[SI+2] ;第一个数比第二个数
JNZ L1 ;1,2不相等则跳转
CMP AX,[SI+4] ;接上面,1,2相等的话比较1,3
JNZ L2
LEA DX,DISP1 ;不相等则跳转,显示两个相等
CALL PRINT1 ;否则全相等,调用子程序显示
JMP QUIT
L1:CMP AX,[SI+4] ;此处是在1,2不相等的条件下比较1,3
JZ L2 ;相等的话即有两个相等跳转至L2(显示DISP2)
MOV AX,[SI+2]
CMP AX,[SI+4] ;1,3不相等,1,2不相等,比较2,3
JZ L2
LEA DX,DISP3 ;2,3相等的话也是两个相等,同样跳转至L2
CALL PRINT1 ;否则没
970f
有相等的,调用子程序显示disp3
JMP QUIT
L2:
LEA DX,DISP2
CALL PRINT1
QUIT:MOV AX,4C00H
INT 21H
main endp
;
;子程序部分
PRINT1 PROC
MOV AH,09H
INT 21H ;调用功能显示都相等
RET
PRINT1 ENDP
CODE ENDS
END START
5.Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中元素的值为负数的项删除。
DATAS SEGMENT
Link   dw -9h,3h,33h,2h,1h,-77h,22h,23h,33h
finial  dw ($-Link)/TYPE Link
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lea si,Link
mov cx,finial
ag:
mov ax,[si]
cmp ax,0
jge exit
dec cx
push cx
mov di,si
delete:
mov ax,[di+2]
mov [di],ax
add di,2
loop delete
pop cx
exit:
add si,2
loop ag

MOV AH,4CH
INT 21H
CODES ENDS
END START
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: