汇编复习题 Test1


最近复习汇编……可能会有错

1.已知变量X的值为2767,请编程序统计变量X中的二进制值中有多少个1,并记入ONE变量中。
2.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
3.试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果
4.编写一子程序SKIPLINES,完成输出空行的功能。空行的行数在参数AX寄存器中。
5. Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中内容为0FFFFH的项删除。
1.DATAS SEGMENT
X DW 2767H
ONE DW ?
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX, X
MOV BX,0H
MOV CX,16
again:
shl ax,1
ADC BX,0
loop again
mov ONE,BX
MOV AH,4CH
INT 21H
CODES ENDS
END START

2.data segment
buf db 101,?,101 dup (?)
data ends

stack segment stack
dw 20h dup(?)
top label word
stack ends

code segment
assume ds:data,cs:code,ss:stack
p proc far

mov ax,data
mov ds,ax

mov ax,stack
mov ss,ax
lea sp,top

;输入到缓冲区
lea dx,buf
mov ah,0ah
int 21h
;cx=输入的个数 si=指向缓冲区的开头
lea si,buf
inc si
mov cx,[si]
xor bx,bx

l1: inc si
cmp BYTE PTR[si],'0'
jb l1
cmp BYTE PTR[si],'9'
ja l1
cmp BYTE PTR[si],'$'
je exit2
inc bl
loop l1
exit2:
MOV AX,0003H
INT 10H

;输出结果
mov cx,8
input:
rol bl,1
mov dl,bl
and dl,1
add dl,30h
mov ah,02h
int 21h
loop input

exit:
mov ah,4ch
int 21h

p endp
code ends
end p
3.
00DATAS SEGMENT
str1 db 'dfsaff'
len_string1 equ $-str1
str2 db 'dfsadf'
len_string2 equ $-str2
str3 db 'match$'
str4 db 'not match$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,ES:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
xor bx,bx
mov cx,len_string1
cmp cx,len_string2
JNZ LAB2
MOV DI,OFFSET STR1
MOV SI,OFFSET STR2
repz CMPSB
JZ LAB1
JNZ LAB2
LAB1:
mov dx,offset str3
mov ah,09h
int 21h
mov ah,4ch
int 21h
LAB2:
mov dx,offset str4
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START
00
00H 01FC
00H 01FD
80H 01FE
0FH 01FF

4.
stack segment
db 64 dup (?)
stack ends
data segment
msg1 db 'There are some empty rows under this row!','$'
msg2 db 'Success!','$'
data ends
code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax
mov ah,09H
mov dx,offset msg1
int 21H
mov ax,0
call WRITE
mov ah,09H
mov dx,offset msg2
int 21H
mov ax,4C00H
int 21H
WRITE:
;(插入空行,AX=所空行数)
;(注:AX为0时为重起一行)
mov cx,ax
inc cx
mov ah,02H
WRITE001:
mov dl,0DH
int 21H
mov dl,0AH
int 21H
loop WRITE001
ret
code ends
end start

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号