24个汇编小程序
题目列表:
逆序输出字符串“BASED ADDRESSING”
从键盘上输入两个数,分别放到x,y单元,求出它们的和
是编写一段程序,要求在长度为10h的数组中,出大于42h的无符号数的个数并存入地址
为up开始区域,出小于42h的无符号数的个数并存入地址为down的开始区域
键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出
从键盘上就收一个小写字母,出它的前导字符和后续字符,在顺序显示这三个字符
把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来
求出首地址为data的100个字数组中的最小偶数,并把它放在ax中
输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match”
从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数
从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果
有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项
向前压缩,最后将数组的剩余部分补上零
从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0
在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值
放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况)
一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中
设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在
S单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序
从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示
这三类的计数结果
已定义两个整数变量A和B,试编写程序完成以下功能
(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中
(2)若两个数均为奇数,则将两个数加1后存回原变量
(3)若两个数均为偶数,则两个变量均不变
写一段子程序skiplines,完成输出空行的功能。空行的行数由用户在主程序中通过键盘输入,
并将行数放在ax寄存器中
设有10个学生成绩分别是76, 69,84,73,88,99,63,100和80。试编写一个子程序统
计60-69分,70-79分,80-89分,90-99分和100分的人数,并分别放到S6,S7,S8,S9,S10单元中
编写子程序嵌套结构的程序,把整数分别用二进制和八进制显示出来
在D盘根目录建立一个文件,第一次向文件写入“123456”六个字符,第二次增加“abcdefg”几个字符
从键盘上输入文本文件:“d:\”的内容后,然后新建一个文件“d:\”,把前一个文件的所有内容复制到后一个文件中
从键盘上输入一个十进制数,以十六进制数显示出来。要求子程序用寄存器参数传送方法
试编制一个程序,把bx寄存器中的二进制数用十六进制数的形式在屏幕上显示出来
代码:
1.逆序输出字符串“BASED ADDRESSING”
s1 segment stack ;定义栈段s1
dw 100 dup(?) ;定义栈空间为100
top label word ;top指向栈顶
s1 ends
s2 segment ;定义数据段s2
s db 'BASED ADDRESSING','$' ;定义字符串s
S2 ends
s3 segment ;定义代码段s3
assume cs:s3,ds:s2,ss:s1
main proc far
mov ax,s1 ;栈初始化——
mov ss,ax
lea sp,top ;——栈初始化
mov ax,s2 ;数据段初始化——
mov ds,ax ;——数据段初始化
mov si,15
l: mov dl,s[si] ;dl获取字符串s的最后一个(从零开始的第十五个字符)mov ah,2 ;调用int 21h 2号功能输出dl上的值
int 21h
dec si ;寄存器减一,准备获取下一个字符
cmp si,0
ja l
mov ah,4ch ;终止
int 21h
main endp
s3 ends
end main
2.从键盘上输入两个数,分别放到x,y单元,求出它们的和
s1 segment stack
dw 100h dup(?)
top label word
s1 ends
s2 segment
h1 db 'Please input x:','$' ;提示输入
h2 db 'Please input y:','$' ;提示输入
h3 db 'z=x+y:','$' ;提示输出
crlf db 0dh,0ah,24h ;定义回车换行
x dw ?
y dw ?
s2 ends
s3 segment
assume cs:s3,ds:s2,ss:s3
main proc far
mov ax,s1 ;初始化——
mov ss,ax
lea sp,top
mov ax,s2
mov ds,ax ;——初始化
lea dx,h1 ;int 21h 9号功能输出“提示输入x”的字符串
mov ah,9
int 21h
xor bx,bx ;bx清零,即把bx置零
InputX:
mov ah,1 ;输入一个字符
字符串转数组 前端int 21h
cmp al,0dh ;判断时候为“回车”字符
jz exit1 ;如果是回车字符就跳转到exit1
cmp al,30h ;和30h(即字符0的asii值)比较
jl exit1 ;如果输入字符小于'0',跳转到exit1
cmp al,39h ;和39h(即字符9的ascii值)比较
jg exit1 ;如果输入字符大于'9',跳转到exit1
sub al,30h ;al减去30h,输入字符转化成数字(从这一行开始到后面的add bx,ax为输入字符转化为数字的处理方法)
cbw ;al扩充为ax
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax ;sub al,30h开始到这一行为输入字符转化为数字的处理方
法
jmp InputX
exit1: mov x,bx ;把输入的存于bx的放到x中
lea dx,crlf
mov ah,9
int 21h
lea dx,h2
mov ah,9
int 21h
xor bx,bx
InputY: ;和InputX类似,输入y
mov ah,1
int 21h
cmp al,0dh
jz exit2
cmp al,30h
jl exit2
cmp al,39h
jg exit2
sub al,30h
cbw
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
jmp InputY
exit2: mov y,bx ;把输入的存于bx的放到y中
mov bx,x
add bx,y ;此时bx为两数加和
lea dx,crlf
mov ah,9
int 21H
lea dx,h3
mov ah,9
int 21h
xor si,si ;si清零,用作计数
mov ax,bx ;把和放到ax上
l4: mov cl,10 ;把和连续除以10知道和变为零,余数依次进栈div cl
mov dl,ah
mov dh,0
push dx
inc si
mov ah,0 ;重要,不能漏写
cmp al,0
jnz l4
l5: pop dx ;余数依次出栈
add dl,30h ;余数转换为显示的余数字符
mov ah,2 ;输入余数字符
int 21h
dec si
cmp si,0
jnz l5
mov ah,4ch
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论