行显示“Y=2X+3=”以及十进制计算结果。
data segment\\ x db ?\\ y dw ?\\ mess1 db 0ah,0dh,'input x:$'\\ mess2 db 0ah,0dh,'Y=2X+3=$'\\data
ends\\code
segment\\
assume
cs:code,ds:data\\start:\\ mov ax,data\\ mov ds,ax\\let3:\\ mov dx,offset mess1\\ mov ah,9\\ int 21h\\ mov ah,1\\ int 21h\\ cmp al,'0'\\ jb out1\\ cmp al,'9'\\ ja out1\\ and al,0fh\\ mov bl,2\\ mul bl\\ add ax,3\\ mov y,ax\\ mov cx,0\\ mov bx,10\\let0:\\ mov dx,0\\ inc cx\\ idiv bx\\ push dx\\ cmp ax,0\\ jne let0\\ mov dx,offset mess2\\ mov ah,9\\ int 21h\\let1:\\ pop ax\\ add ax,0030h\\ mov dl,al\\ mov ah,2\\ int 21h\\ dec cx\\ cmp cx,0\\ jnz let1\\ jmp let3\\out1:\\ mov ah,4ch\\ int 21h\\ code ends\\end start
2. 编写程序,将键盘输入的小写字母变为大写字母显示在屏幕上,输入小写字
母以外的其它字符则退出。
data segment\\ mess1 db 0ah,0dh,'xiaoxieinput:$'\\ mess2 db 0ah,0dh,'daxieoutput:$'\\data
ends\\code
segment\\
assume
cs:code,ds:data\\start:\\ mov ax,data\\ mov ds,ax\\let2:\\ mov dx,offset mess1\\ mov ah,9\\ int 21h\\ mov ah,1\\ int 21h\\ cmp al,'a'\\ jb out1\\ cmp al,'z'\\ ja out1\\ mov bl,al\\ mov dx,offset mess2\\ mov ah,9\\ int 21h\\let0:\\ sub bl,20h\\ mov dl,bl\\ mov ah,2\\ int 21h\\ jmp let2\\out1:\\ mov ah,4ch\\ int 21h\\code ends\\end start
3. 设计程序。实现Z=X/4+16*Y,X和Y都是一位十进制数。要求从键盘输入,
在下一行显示“Z=X/4+16*Y”以及十进制计算结果。
data segment\\ mess1 db 0ah,0dh,'input x:$'\\ mess2 db 0ah,0dh,'input y:$'\\ mess3 db 0ah,0dh,'z=x/4+16*y=$'\\data ends\\code segment\\ assume cs:code,ds:data\\start:\\ mov ax,data\\ mov ds,ax\\let0:\\ mov dx,offset mess1\\ mov ah,9\\ int 21h\\ mov ah,1\\ int 21h\\ mov cl,2\\ sub al,30h\\ mov ah,0\\ sar ax,cl\\ mov bl,al\\ mov dx,offset mess2\\ mov ah,9\\ int 21h\\ mov ah,1\\ int 21h\\ sub al,30h\\ mov ah,0\\ mov cl,4\\ sal ax,cl\\ add al,bl\\ mov bx,ax\\ mov dx,offset mess3\\ mov ah,9\\ int 21h\\let1:\\ mov ax,bx\\ mov cx,0\\ mov bx,10\\let2:\\ mov dx,0\\ inc cx\\ idiv bx\\ push dx\\ cmp ax,0\\ jne let2\\let3:\\ pop ax\\ add ax,0030h\\ mov dl,al\\ mov ah,2\\ int 21h\\ dec cx\\ cmp cx,0\\ jne let3\\ mov ah,4ch\\ int 21h\\ code ends\\end start
4. 用查表的方法将内存单元中的字用十六进制显示出来。
data segment\\ table db 30h,31h,32h,33h,34h,35h,36h,37h\\ db 38h,39h,41h,42h,43h,44h,45h,46h\\ mess1 db 0ah,0dh,'output:$'\\ hex db 6\\ ascii db ?\\data ends\\code segment\\ assume cs:code,ds:data\\start:\\ mov ax,data\\ mov ds,ax\\mov dx,offset mess1\\ mov ah,9\\ int 21h\\ mov bx,offset table\\ mov al,hex\\ xlat\\ mov ascii,al\\ mov dl,al\\ mov ah,2\\ int 21h\\ mov ah,4ch\\ int 21h\\ code ends\\end start
5. 输入0~255以内的十进制数,显示出相应的十六进制数。
data segment\\ x db 3 dup(?)\\ mess1 db 0dh,0ah,'decimal=$'\\ mess2 db 0dh,0ah,'hex=$'\\data ends\\code segment\\ assume cs:code,ds:data\\start:\\ mov ax,data\\ mov ds,ax\\let0:\\ mov si,0\\ mov x,0\\ mov x+1,0\\ mov x+2,0\\ mov dx,offset mess1\\ mov ah,9\\ int 21h\\let1:\\ mov ah,1\\ int 21h\\ cmp al,0dh\\ jz let2\\ sub al,30h\\ mov x[si],al\\ inc si\\ jmp let1\\let2:\\ mov dx,offset mess2\\ mov ah,9\\ int 21h\\ cmp si,1\\ ja let3\\ mov bl,x\\ mov cl,1\\ add bl,30h\\ mov dl,bl\\ mov ah,2\\ int 21h\\ jmp out1\\let3:\\ cmp si,2\\ ja let4\\ mov al,x\\ mov cl,10\\ mul cl\\ add al,x+1\\ mov ah,0\\ mov bl,16\\ div bl\\ mov bx,ax\\ mov cl,2\\ jmp let5\\let4:\\ mov al,x\\ mov cl,10\\ mul cl\\ add al,x+1\\ mul cl\\ add al,x+2\\ mov ah,0\\ mov bl,16\\ div bl\\ mov bx,ax\\ mov cl,2\\let5:\\ cmp bl,10\\ jl let6\\ add bl,7\\let6:\\ add bl,30h\\ mov dl,bl\\ mov ah,2\\ int 21h\\ mov bl,bh\\ dec cl\\ jne let5\\out1:\\ mov ah,4ch\\ int 21h\\code ends\\ end start
6. 分支程序设计。完成如下公式的计算,请写出程序。
(X+3)/2 X>0
Y= 0 X=0
X×4 X<0
data segment\\x dw -1200\\y dw ?,?\\z dw 10\\count db 0\\data ends\\code segment\\assume ds:data,cs:code\\start:\\ mov ax,data\\ mov ds,ax\\ cmp x,0\\ jg prog1\\ jz prog2 \\ mov ah,2\\ mov dl,2dh\\ int 21h \\ mov ax,x\\ neg ax\\ mov cl,2\\ sal ax,cl\\ jmp exit\\prog1:\\ mov ax,x\\ add ax,3\\ mov bl,2\\ idiv bl\\ mov byte ptr y,al\\ mov byte ptr y+1,ah\\ mov ah,0\\ jmp exit\\prog2:\\ mov y,0\\ mov ax,0\\ jmp exit\\exit: mov dx,0\\ idiv z\\ push dx\\
inc count\\ cmp ax,0\\ jnz exit\\exit1:\\ pop dx\\ add dx,0030h\\ mov ah,2\\ int 21h\\ dec count\\ jnz exit1\\ mov ah,4ch\\ int 21h\\code ends\\end start
7. 字数组M中有10个数据,分类统计其中正数、负数、0的个数,分别存入
POSI、NEGA、ZERO 单元。
data segment\\M db 91h,-1,2,3,4,5,80h,0,-3,-4\\str1 db 'POSI:$'\\str2 db 0dh,0ah,'NEGA:$'\\str3 db 0dh,0ah,'ZERO:$'\\count1 db 0\\count2 db 0\\count3 db 0\\data ends\\code segment\\assume ds:data,cs:code\\begin:\\ mov ax,data\\ mov ds,ax\\ mov si,0\\for:\\ cmp si,10\\ jz output\\ cmp M[si],0\\ jg for1\\ jl for2\\ inc count3\\ inc si\\ jmp for\\for1:\\ inc count1\\ inc si\\ jmp for\\for2: \\ inc count2\\ inc si\\ jmp for\\output:\\ mov ah,9\\ mov dx,offset str1\\ int 21h\\ mov dl,count1\\ add dl,30h\\ mov ah,2\\ int 21h\\ mov ah,9\\ mov dx,offset str2\\ int 21h\\ mov dl,count2\\ add dl,30h\\ mov ah,2\\ int 21h\\ mov ah,9\\ mov dx,offset str3\\ int 21h\\ mov dl,count3\\ add dl,30h\\ mov ah,2\\ int 21h\\ mov ah,4ch\\ int 21h\\code ends\\end begin
8. 分别统计3个班级中某科成绩优秀的人数和不及格的人数。 data segment tongji db 6 dup(?) grade db 25,42,95,77 db 12,0,85,97 db 92,99,59,24
i dw 3\\j dw 4\\n1 db ?\\n2 db ?\\data ends\\code segment\\assume ds:data,cs:code\\start:\\ mov ax,data\\ mov ds,ax\\ mov si,0\\ mov di,0\\ mov cx,i\\for1:\\ push cx\\ mov cx,j\\for:\\ cmp grade[si],60\\ jge let1\\ inc n2\\ jmp let2\\let1:\\ cmp grade[si],90\\ jl let2\\ inc n1\\let2:\\ inc si\\ loop for\\ mov al,n1\\ mov ds:[di],al\\ mov al,n2\\ mov ds:[di+1],al\\ add di,2\\ mov n1,0\\ mov n2,0\\ pop cx\\ loop for1\\ mov ah,4ch\\ int 21h\\code ends\\end start
9. 编写程序,将AX寄存器中的16位数分成4组,每组4位,从低到高分别
放在AL、BL、CL、DL中。
.model small\\.data\\num db 4 dup(?)\\count db 4\\.code\\begin:\\ mov ax,@data\\ mov ds,ax\\ mov ax,0101h\\ mov cl,4\\ mov si,0\\for:\\ rol ax,cl\\ mov bh,al\\ and bh,0fh \\ mov num[si],bh\\ inc si\\ dec count\\ jnz for\\ mov bh,0\\ mov ah,0\\ mov dl,num[0]\\ mov cl,num[1]\\ mov bl,num[2]\\ mov al,num[3]\\ mov ah,4ch\\ int 21h end begin
10. 对一个有10个元素的字节数组按降序排序 data segment\\x db 'a','b','c','d','f','g','h','i','j','k'\\n equ $-x
data ends\\code segment\\assume ds:data,cs:code\\begin:\\ mov ax,seg x\\ mov ds,ax\\ mov cx,n\\ dec cx \\loop1:\\ push cx\\ mov si,0\\loop2:\\ mov al,x[si]\\ cmp al,x[si+1]\\ jge for\\ xchg al,x[si+1]\\ mov x[si],al\\for:\\ inc si\\ loop loop2\\ pop cx\\ loop loop1\\ mov ah,4ch\\ int 21h\\ code ends\\end begin
11. 实现两个键入的十进制数相减运算(如果结果为负数,需要求绝对值)。 data
segment\\num
dw
2
dup(?)\\str1
db
0dh,0ah,'x1=$'\\str2
db
0dh,0ah,'x2=$'\\str3 db 0dh,0ah,'x1-x2=$'\\data ends\\code segment\\assume ds:data,cs:code\\begin:\\ mov ax,data\\ mov ds,ax\\ main proc far\\ mov bx,0\\ mov si,0\\ mov dx,offset str1\\ mov ah,9\\ int 21h\\ call sub1\\ mov dx,offset str2\\ mov ah,9\\ int 21h\\ mov bx,0\\ call sub1\\ mov dx,offset str3\\ mov ah,9\\ int 21h\\ call sub2\\ call sub3\\ mov ah,4ch\\ int 21h\\ main endp\\ sub1 proc near\\for: mov ah,1\\ int 21h\\ cmp al,0dh\\ jz exit\\ and ax,000fh\\ xchg ax,bx\\ mov cx,10\\ mul cx\\ xchg ax,bx\\ add bx,ax\\ jmp for\\ exit:\\ mov num[si],bx\\ add si,2\\ ret\\ sub1 endp\\ sub2 proc near\\ mov ah,0\\ mov ax,num\\ sub ax,num+2\\ cmp ax,0\\ jge for1\\ neg ax\\ for1: ret\\ sub2 endp\\ sub3 proc near\\ mov bx,10\\ mov cx,0\\ let:\\ mov dx,0\\ div bx\\ push dx\\ inc cx\\ cmp ax,0\\ jnz let\\ let1:\\ pop dx\\ add dl,30h\\
mov ah,2\\ int 21h\\ dec cx\\ jnz let1\\ ret\\ sub3 endp\\code ends\\end begin
12. 键入一个十六进制数,求其真值(用十进制显示,负数前加负号“-”)。 data segment\\x dw 0\\str1 db 0dh,0ah,'hex=$'\\str2 db 0dh,0ah,'dec=$'\\data ends\\code segment\\assume ds:data,cs:code\\begin:\\ mov ax,data\\ mov ds,ax\\ main proc far\\ mov ah,9\\ lea dx,str1\\ int 21h\\ call sub1\\ mov ah,9\\ lea dx,str2\\ int 21h\\ test x,8000h\\ jz for1\\for:\\ mov ah,2\\ mov dl,'-'\\ int 21h\\ neg x\\for1: \\ call sub3\\ mov ah,4ch\\ int 21h\\ main endp\\ sub1 proc near\\for2:\\ mov ah,1\\ int 21h\\ cmp al,0dh\\ jz exit\\ cmp al,'9'\\ jbe for3\\ cmp al,'F'\\ jbe for5\\ cmp al,'f'\\ jbe for6\\for5:\\ sub al,7h\\ jmp for3\\for6: sub al,27h\\for3: mov ah,0\\ sub al,30h\\for4:\\ xchg ax,x\\ mov cx,16\\ mul cx\\ xchg ax,x\\ add x,ax\\ jmp for2\\exit:\\ ret\\ sub1 endp \\ sub3 proc near\\ mov ax,x\\ mov bx,10\\ mov cx,0\\ let:\\ mov dx,0\\ div bx\\ push dx\\ inc cx\\ cmp ax,0\\ jnz let\\ let1:\\ pop dx\\ add dl,30h\\ mov ah,2\\ int 21h\\ dec cx\\ jnz let1\\ ret\\ sub3 endp\\code ends\\end begin
13. 对输入的负数求反码,并用十六进制显示出来。
include 13.mac\\.model small\\.data\able db '01234567ABCDEF'\\s1 db 0dh,0ah,'input:$'\\s2 db 0dh,0ah,'Hex=$'\\;s3 db 0dh,0ah,'Binary=$'\\x dw 0\\count db ?\\.code\\begin:\\ mov ax,@data \\ mov ds,ax\\ main proc far\\ mov ah,9\\ lea dx,s1\\ int 21h\\ mov ah,1\\ int 21h\\ cmp al,'-'\\ jz l1\\l2:\\ cmp al,0dh\\ jz exit\\l4: \\ and al,0fh\\ mov ah,0\\ xchg x,ax\\ mov cx,10\\ mul cx\\ xchg x,ax\\ add x,ax\\ mov ah,1\\ int 21h\\ cmp al,0dh\\ jz l3\\ jmp l4\\l1:\\ call sub1\\ not x\\l3: \\ mov ah,9\\ lea dx,s2\\ int 21h\\ jinzhi 4,4,000fh\\ mov ah,9\\ ; lea dx,s3\\ ; int 21h\\ ; jinzhi 1,16,0001h\\exit:\\ mov ah,4ch\\ int 21h\\ main endp\\ sub1 proc \\for0:\\ mov ah,1\\ int 21h\\ cmp al,0dh\\ jz for1\\
and al,0fh\\ mov ah,0\\ xchg x,ax\\ mov cx,10\\ mul cx\\ xchg x,ax\\ add x,ax\\ jmp for0\\for1:\\ ret\\ sub1 endp\\end begin
14. 写出对内存单元X中的补码求真值的子程序,补码保存在BX中。 data segment\\x dw 0ffffh\\y dw 10\\data ends\\code segment\\assume ds:data,cs:code\\begin:\\ mov ax,data\\ mov ds,ax\\ main proc far\\ mov bx,x\\ test bx,8000h\\ jz for1\\for:\\ mov ah,2\\ mov dl,'-'\\ int 21h\\ neg bx\\for1: \\ call sub1\\ mov ah,4ch\\ int 21h\\ main endp\\ sub1 proc \\ mov ax,bx\\ mov cx,0\\ let:\\ mov dx,0\\ div y\\ push dx\\ inc cx\\ cmp ax,0\\ jnz let\\ let1:\\ pop dx\\ add dl,30h\\ mov ah,2\\ int 21h\\ dec cx\\ jnz let1\\ ret\\ sub1 endp\\code ends\\end begin 15. 编写程序。键盘输入两个1位的十进制数,做加法运算。加法结果调整为非
压缩的BCD码,并显示出十进制结果。要求调用宏INPUT和OUTPUT实现键盘输入和显示部分。
include 15.mac\\.model small\\.data\\str1 db 'x1=$'\\str2 db 0ah,0dh,'x2=$'\\str3 db 0ah,0dh,'x1+x2=$'\\.code\\start:\\ mov ax,@data\\ mov ds,ax\\ disp str1 \\ input\\ sub al,30h\\ mov bl,al\\ disp str2\\ input\\ sub al,30h\\ mov ah,0\\ add al,bl\\ aaa\\ add ax,3030h\\ mov bx,ax\\ disp str3\\ output bh\\ output bl\\ mov ah,4ch\\ int 21h\\ end start
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务