asm文件怎么写

1.问两个ASM文件的写法程序中,对应DisplayHexDigit的子程序是:AL_ASCII,对应DisplayHexByte的子程序是:ByteD_ASCII 。
; 本程序通过编译,运行正确Code Segment Assume CS:Code,DS:CodeCR equ 000DHLF equ 000AHKBBack equ 0008H; -----------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM; ----------------------------------------- ; 功能:显示输出一个字符 ; 入口:dl=要显示的字符 Output_Chr proc Near push ax mov ah,02h int 21h pop ax ret Output_Chr endp ; ----------------------------------------- ; 功能:输出回车换行Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retOutput_CTLF endp ; -----------------------------------------; 功能:取光标位置; 入口:无; 出口:DH=行号,DL=列号GetCursor Proc Near PUSH AX PUSH BX PUSH CX XOR BX,BX MOV AH,3 INT 10H MOV Cursor_Row,DH MOV Cursor_Col,DL POP CX POP BX POP AX RETCursor_Row DB ?Cursor_Col DB ?GetCursor EndP; -----------------------------------------; 功能:置光标位置; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)SetCursor Proc Near PUSH CX PUSH BX PUSH AX MOV DH,Cursor_Row MOV DL,Cursor_Col XOR BX,BX MOV AH,2 INT 10H POP AX POP BX POP CX RETSetCursor EndP; -----------------------------------------; 功能:将AL中的低4位二进制数转换成十六进制显示的ASCII码; 入口:AL; 出口:AL=转换后的ASCII码AL_ASCII Proc Near cmp al,10 ;AL=10,按大写字母处理 @@To_ASCII: add al,'0' ;转换成相应的数字或大写字母 ret AL_ASCII EndP ; -----------------------------------------; 功能:将AL中的字节数据转换成十六进制显示的ASCII码; 入口:AL; 出口:AX=转换后的ASCII码Byte_ASCII Proc Near push cx mov cx,4 xor ah,ah ;将AH置0 shl ax,cl ;将AX左移4位 shr al,cl ;将AL右移4位 xchg ah,al call AL_ASCII ;调用子程序,将AL中的值转换成相应的ASCII码 xchg ah,al call AL_ASCII xchg ah,al pop cx ret Byte_ASCII EndP ; -----------------------------------------; 功能:将AL中的字节数据转换成十六进制显示的ASCII码,并在当前光标位置显示; 入口:AL; 出口:AX=转换后的ASCII码ByteD_ASCII Proc Near push dx push ax call Byte_ASCII ;将AL中的字节数转换成十六进制显示的ASCII码 cmp al,'9' jbe $+7 mov dl,'0' call Output_Chr ;显示一个字符 mov dl,al call Output_Chr ;显示一个字符 mov dl,ah call Output_Chr ;显示一个字符 mov dl,'H' call Output_Chr ;显示一个字符 pop ax pop dx ret ByteD_ASCII EndP ; -----------------------------------------; 功能:键盘输入一个N位的十进制数字,将其转换成二进制数并保存在指定的内存单元 。; 入口:N=数字位数;di=保存输入的数字首地址; 出口:转换后的二进制数保存在di所指的单元Input_Digit Proc Near push dx push cx push bx push di lea di,@@Save_Tmp push di cld mov cx,N push [email protected]@Input: call GetCursor ;取光标位置 mov ah,1 ;从键盘接受一个字符 int 21h cmp al,CR ;若键入的是回车,已经键入的数字不足N位 jz @@ASC_Dec ;转去处理已经键入的数字 cmp al,KBBack jz @@KB_Back ;若是回空键,重新输入 cmp al,'0' jb @@KBBack ;若低于数字'0',重新输入 cmp al,'9' ja @@KBBack ;若低于数字'9',重新输入 jmp @@[email protected]@KB_Back: dec Cursor_Col inc cx dec [email protected]@KBBack: call SetCursor ;置光标位置 jmp @@[email protected]@Save_Dig: and al,0fh ;转换成二进制数 stosb ;保存 loop @@Input ;接受下一个数字@@ASC_Dec: mov ax,cx pop cx pop si sub cx,ax ;实际输入的数字位数 xor bp,bp xor dx,dx xor ax,ax jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理 dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数 jcxz @@One_Digit ;若输入的数字只有一位,转去直接保存这个二进制数 mov bx,[email protected]@Mul_Ten: lodsb cbw add ax,bp mul bx mov bp,ax loop @@[email protected]@One_Digit:lodsb cbw add ax,[email protected]@Save_Ret: pop di stosb pop bx pop cx pop dx [email protected]@Save_Tmp db 16 dup(?)Input_Digit EndP; -----------------------------------------N equ 3 ;输入数字的位数Prompt_Str1 db 'Please input a number(0-15): $'Prompt_Str2 db 'Please input a number(0-255): $'Number db ? ;保存输入的数据Press_Key db 13,10,13,10,'Press any key to exit 。