1.7子程序及其应用

实验任务:

编一子,主程序,其功能要求如下:

子程序的入口参数为一ASCII码字符,它将该字符的ASCII码分部以十六进制和二进制形式显示出来。如主程序调用该子程序时,若传送给子程序的ASCII码为42H,则显示信息如下:

B:   42H   01000010

主程序的功能是反复从键盘输入字符,然后调用上述子程序,用十六进制及二进制形式显示出键入字符的ASCII码,当输入ESC时返回Dos。

代码(测试可用,排版问题自行调整):

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;This program is created by LiZhuYang(LzySeed) 转载请注明出处;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
assume cs:code,ss:stack
stack segment
 db 512 dup(?)
stack ends

code segment
 start:mov ah,07h                 ;键盘输入无回显
       int 21h
       cmp al,00011011b
       je _ok
       push ax
       mov ah,02h
       mov dl,0Ah
       int 21h
       mov ah,02h
       mov dl,0Dh
       int 21h
       pop ax
       call _ASCII                ;显示要求规则
       mov ah,02h
       mov dl,0Ah
       int 21h
       mov ah,02h
       mov dl,0Dh
       int 21h
      
       ret                        ;不返回操作系统
   
    _ASCII:push ax
           push dx
           push ax
      mov dl,al                 ;ASCII字符
         mov ah,02h
         int 21h
         mov dl,3Ah                ;:号
         mov ah,02h
         int 21h
           call _Blank
           pop ax
           call _ASCIIto16               ;显示ASCII码的16进制值
           call _Blank
           call _ASCIItoB                ;显示ASCII码的二进制值
           pop dx
           pop ax
           ret
          
      _ok:mov ax,4c00h
         int 21h 
          
        
 _ASCIItoB:push cx                        ;此函数完成二进制致ASCII码的转换   
           push bx
           push ax
           push di
           mov di,7
           mov bx,10000000B
           mov cx,8
  change_s:push cx
           push ax
           mov cx,di
           and al,bl
           shr bl,1
           shr al,cl
           add al,30h
           mov dl,al
           mov ah,02h
           int 21h
           dec di
           pop ax
           pop cx
           loop change_s 
           pop di
           pop ax
           pop bx
           pop cx
           ret
_ASCIIto16:push ax
           push bx
        push cx
        push dx
        push ax
           mov cx,4                     ;ASCII码高位字母
           shr al,cl
           cmp al,0Ah
           jnb _TZH
           add al,30h
       TZH:mov dl,al
           mov ah,02h
           int 21h
           pop ax
           and al,00001111B             ;ASCII码低位字母
        cmp al,0Ah
        jnb _TZL
           add al,30h
       TZL:mov dl,al
           mov ah,02h
           int 21h                    
        mov dl,'H'                   ;显示H
        mov ah,02h
        int 21h
        pop dx
        pop cx
        pop bx
        pop ax
           ret
          
    _Blank:push ax                  ;写空格函数
           push cx
           mov cx,4
   s_Blank:mov dl,00h
           mov ah,02h
           int 21h
           loop s_Blank
           pop cx
           pop ax
           ret
      _TZH:add al,37h               ;调整成正确的ASCII码
           jmp TZH
          
      _TZL:add al,37h               ;调整成正确的ASCII码
           jmp TZL      
code ends
end start     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值