汇编语言作业

 

1.从键盘输入1-9任意一个数字,在屏幕上输出对应月份的英文单词。

例如:

输入:1,输出:January

输入:3,输出:March

提示:

Str1 db ‘January$’

Str2 db ‘February$’

……

addr dw str1,str2……

说明:数组addr 中存的是各个字符串的首地址。

代码:
data segment
     s1 db 'January$'
     s2 db 'February$'
     s3 db 'March$'
     s4 db 'April$'
     s5 db 'May$'
     s6 db 'June$'
     s7 db 'July$'
     s8 db 'August$'
     s9 db 'September$'
     addr dw s1,s2,s3,s4,s5,s6,s7,s8,s9
data ends
code segment
    assume cs:code,ds:data
    main proc far
start:
    mov ax,data
    mov ds,ax
    mov ah,01h  
    int 21h
    sub al,31h     
    add al,al
    mov ah,00h
    mov si,ax
    mov dx,addr[si]
    mov ah,09h
    int 21h
    mov ax,4c00h
    int 21h
code ends
end start

2.从键盘输入一个四位十六进制数,然后以二进制形式在屏幕上显示出来。

要求:输入的四个数码必须先拼成一个四位十六进制数,然后再做输出处理。

例如:

输入:3A49

输出:0011101001001001
 

stk segment stack
      dw 20 dup(?)
stk ends
code segment
      assume cs:code,ss:stk
      main proc far
start:
      mov cx,4
      mov bx,0000h
      mov dx,0400h
L1:
      mov ah,01h
      int 21h
      sub al,30h
      cmp al,0ah
      jb S1
      sub al,07h                   ;此时al中放的是读入的数字
S1:
      mov dl,al
      mov ax,bx                    ;bx存放拼成的数

      push cx
      mov cx,4
      shl ax,cl                           
      add al,dl                         
      mov bx,ax  
      pop cx                  
      loop L1

      mov ah,02h
      mov dl,0ah                   ;换行
      int 21h
      mov ah,02h                   ;换行
      mov dl,0dh
      int 21h

      mov cx,16
L2:
      shl bx,1                      ;bx每次左移一位,影响标志位
      mov dl,00h          
      adc dl,30h                    ;带进位的加法
      mov ah,02h
      int 21h
      loop L2

      mov ax,4c00h
      int 21h
      main endp
code ends
end start

3.从键盘输入一个长度不超过30的十进制数字串,计算数字串中各数据字和,并以十进制形式输出。

提示:用A号功能调用输入数字串。

例如:

输入:12459703              经计算,1+2+4+5+9+7+0+3=31

输出:31
 

data segment 
         buf db 30
         len db ?
         str db 30 dup(?)
data ends

stack segment stack
      dw 30 dup(?)
stack ends

code segment
         assume cs:code,ds:data,ss:stack
         main proc far
start:
         mov ax,data
         mov ds,ax

         lea dx,buf          ;将缓冲区首偏移地址str放到dx
         mov ah,0Ah		     ;A号功能调用,读入字符串
         int 21h
         
         mov dl,0ah		     ;打印换行符,不会将输入的数据覆盖
         mov ah,02h
         int 21h

         xor cx,cx
         mov cl,len		     ;将字符串的长度送入cl

         xor bx,bx           ;将ax清零开始累加
         lea si,str
         dec si
      
L1:   
         inc si
         mov al,[si]
         sub al,30h          ;将字符的ASCII码值转为数字
         add bx,ax           ;bl中存放累加的结果
         loop L1
         
         mov bh,0            ;此时bl中存的就是得到的每个输入数字的和
         mov cx,0		     ;cx置0计数
         mov si,10           ;待转换的数需要/10
         mov ax,bx                 

stk:     mov dx,0            ;字除法余数放在dx中,商放在ax中
         div si
         add dx,30h
         push dx             ;余数入栈
         inc cx              ;计数器++
         cmp ax,0            ;看商是否为0
         jnz stk             ;jnz结果不为0则转移
L2:
         pop dx
         mov ah,02h
         int 21h
         loop L2
     
         mov ax,4c00h        ;程序结束
         int 21h
         main endp
code ends
end start	

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值