汇编作业存档及编写环境

Posted on 2022-04-13 10:14  Capterlliar  阅读(160)  评论(0编辑  收藏  举报

1、试编写一个汇编程序,能对键盘输入的小写字母用大写字母显示出来(要求采用子程序格式,即采用子程序完成将小写字母转化成大写字母)。

DATA  SEGMENT
arr   dw 1,3,2,4,2,7,9,34,6
num   equ $-arr
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

big proc near
      sub al,20h
      ret
big endp

START:MOV AX,DATA
      MOV DS,AX
  
      mov ah,1
      int 21h
      call big
      mov dl,al
      mov ah,2
      int 21h

exit:
      mov ah,4ch
      int 21h
CODE  ENDS
      END START
View Code

2、有2个数组:

  ary1 db 12,-35,0,126,-90,-5,68,120,1,-19

  ary2 db 24,25,0,-38,-89,99,68,100,2,-20

比较两个数组的对应位,将大的数放在ary1数组中,小的数放在ary2中(要求采用子程序格式)

DATA  SEGMENT
ary1 db 12,-35,0,126,-90,-5,68,120,1,-19
ary2 db 24,25,0,-38,-89,99,68,100,2,-20
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

comp proc near
      cmp al,bl
      jg next
      xchg al,bl
next:     
      ret
comp endp

START:MOV AX,DATA
      MOV DS,AX
  
      lea di,ary1
      lea si,ary2
      mov cx,ary2-ary1
loop1:
      mov al,[di]
      mov bl,[si]
      call comp
      mov [di],al
      mov [si],bl
      add di,2
      add si,2
      loop loop1

exit:
      mov ah,4ch
      int 21h
CODE  ENDS
      END START
View Code

3、用DOS10号功能调用输入一个字符串,并用DOS9号功能调用将这个字符串输出到屏幕上显示

DATA  SEGMENT
str db 20
len db ?
buf db 50 dup (?)
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA
      MOV DS,AX
  
      lea dx,str
      mov ah,10
      int 21h
      mov dl,0ah
      mov ah,02h
      int 21h

      mov dx,offset buf
      mov cl,len
      mov ch,0
      mov bx,dx
      add bx,cx
      mov byte ptr[bx],'$'

      mov ah,9
      int 21h

exit:
      mov ax,4c00h
      int 21h
CODE  ENDS
      END START
View Code

4、最大和最小数实验

以buff开始的内存单元中有10个有符号数(字节型DB):

-37、28、-115、-2、98、-100、93、120、56、-99

请编写程序,找出最大的数并存入MAX单元中,同时也找出最小的数并存入MIN单元中,在Debug下运行程序,查看数据区MAX和MIN的内容检验运行结果。

DATA  SEGMENT
buf db -37,28,-115,-2,98,-100,93,120,56,-99
len equ $-buf
max db ?
min db ?
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA
      MOV DS,AX
  
      mov cx,len
      mov si,0
      mov bl,200
      mov dl,-200
loop1:
      mov al,buf[si]
      cmp bl,al
      jle next1
      mov bl,al
next1:
      cmp dl,al
      jge next2
      mov dl,al
next2:
      inc si
      loop loop1
      mov max,bl
      mov min,dl

exit:
      mov ax,4c00h
      int 21h
CODE  ENDS
      END START
View Code

5、统计学生成绩

设有20个学生成绩分别56786740879963517410090806888556684964573分。编写程序实现统计低于60分、60-69分、70-79分、80-89分、90-99分及100分的人数,并分别存放在s5s6s7s8s9s10单元中。

DATA  SEGMENT
buf dw 56,78,67,40,87,99,63,51,74,100,90,80,68,88,55,66,84,96,45,73
len equ ($-buf)/2
s dw ?
s5 dw 0
s6 dw 0
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA
      MOV DS,AX
  
      mov cx,len
      mov si,0
loop1:
      mov ax,buf[si]
      cmp ax,60
      jge n6
      mov bx,s5
      inc bx
      mov s5,bx
      jmp next
n6:
      cmp ax,70
      jge n7
      mov bx,s6
      inc bx
      mov s6,bx
      jmp next
n7:
      cmp ax,80
      jge n8
      mov bx,s7
      inc bx
      mov s7,bx
      jmp next
n8:
      cmp ax,90
      jge n9
      mov bx,s8
      inc bx
      mov s8,bx
      jmp next
n9:
      cmp ax,100
      jge n10
      mov bx,s9
      inc bx
      mov s9,bx
      jmp next
n10:
      mov bx,s10
      inc bx
      mov s10,bx
next:
      add si,2
      loop loop1

exit:
      mov ax,4c00h
      int 21h
CODE  ENDS
      END START
View Code

6、查找字符

试编写一个有主程序和子程序结构的程序模块。

主程序:要求从键盘接收一串字符并存于字节数组TABLE中,显示字符CHAR出现的次数。

子程序:在以TABLE为首地址的字节数组中查找CHAR,统计出现的次数。

DATA  SEGMENT
str db 'please enter:$'
table db 50,?,50 dup (?)
n db ?
char db 'c'
DATA  ENDS
CODE  SEGMENT     
      ASSUME CS:CODE,DS:DATA

find proc near
      mov bl,0
      mov cl,n
      mov si,2
loop1:
      mov al,table[si]
      cmp al,char
      jne next1
      inc bl
next1:
      inc si
      loop loop1
      ret
find endp

START:MOV AX,DATA
      MOV DS,AX
  
      lea dx,str
      mov ah,9
      int 21h

      lea dx,table
      mov ah,10
      int 21h

      mov cl,table[1]
      mov n,cl
      call find

      mov dl,10
      mov ah,2
      int 21h

      mov dl,bl
      add dl,'0'
      mov ah,2
      int 21h

exit:
      mov ax,4c00h
      int 21h
CODE  ENDS
      END START
View Code

 

编写环境:vscode+插件MASM/TASM+插件VSCode DOSBox

没配settings

MASM设置:

 

 右键运行或调试

t执行下一步

u看命令地址,g跳转,g+空格+偏移地址即可

d看存储器信息,一般是d ds:0000

缓冲区设置:缓冲区大小,?,空间。例如:50,?,50 dup (?)