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 cx@@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 @@Save_Dig@@KB_Back: dec Cursor_Col inc cx dec di@@KBBack: call SetCursor ;置光标位置 jmp @@Input@@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,10@@Mul_Ten: lodsb cbw add ax,bp mul bx mov bp,ax loop @@Mul_Ten@@One_Digit:lodsb cbw add ax,bp@@Save_Ret: pop di stosb pop bx pop cx pop dx ret@@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。
$' Start: push cs pop ds push cs pop es Output Prompt_Str1 ;提示输入数字 lea di,Number ;数字保存地址 call Input_Digit ;输入数字 call Output_CTLF ;输出一个回车、换行 call Output_CTLF ;输出一个回车、换行 mov al,Number call AL_ASCII ;将AL中的低4位二进制数转换成十六进制显示的ASCII码 mov dl,al call 。
2..asm是什么文件
ASM是汇编语言源程序的扩展名,汇编语言(Assembly Language)是面向机器的程序设计语言。汇编语言是一种功能很强的程序设计语言,是利用计算机所有硬件特性并能直接控制硬件的语言。打开asm文件有两种方法即笔记本和MasmEdit软件。
在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。
汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。
扩展资料:
汇编语言的特点
1、面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。
2、保持了机器语言的优点,具有直接和简捷的特点。
3、可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
4、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。
5、经常与高级语言配合使用,应用十分广泛。
参考资料来源:搜狗百科—ASM (汇编语言)
3.怎么对.asm文件进行汇编和连接
首先你的代码是16位还是window32位的代码?每个语言编写的代码都有经过写代码—>编译--->连接。
我看你的截图,是用win7的吧,win7不支持XP的程序,要通过安装微软的虚拟机。打开DOS命令台打开MASM--->输入----->asm源文件路径 例:C:\MASM.EXESource filenam [.ASM]:D:\1.ASM 源代码1.asm后显示有三个要保存的文件:OBJ二进制文件 即目标文件 LST列表文件CRF交叉引用文件后两个是中间结果,直接忽略,保存目标文件就行了。
保存目标文件,即填写完整路径 Source filenam [1.OBJ]:D:\1 编译的OBJ文件1.OBJ 连接也一样只保存EXE,DOS打开LINKE如:c:\linke.exeObject Modules [.OBJ]:D\1 编译的OBJ目标文件路径Run File [1.exe]:d:\1 保存连接生成的EXE和文件名。
4.怎吗保存asm文件
如果是文本编辑器就直接用编辑器保存功能好了。
如果是在Debug下反汇编的话,就拷贝屏幕。或者:
C:>debug A.com <cmd.txt >a.asm
这里假设你要反汇编A.com程序,而且你知道要反汇编哪部分,把反汇编指令写在cmd.txt中,记得最后一定加条Q指令就好。debug会从cmd.txt读出你的指令然后退出。
不过win7已不再提供该程序,有些Winxp也不提供了。
另外,文刀舍予说的很对。想当年,我用的是edline,估计没多少人听说过了,变了一个test.asm保存后,就在命令行(那时还是command呢)输入test回车,告诉我说命令找不到?试了很多遍呢,dir查看了文件在啊?奇怪了很久。后来一高手告诉我说还得asm编译,还得link,后来终于搞定。
应该鼓励自学的同学哈。
5.怎么对.asm文件进行汇编和连接
首先你的代码是16位还是window32位的代码?每个语言编写的代码都有经过来写代码—>编译--->连接。
我看你的截图自,是用win7的吧,win7不支持XP的程序,要通过安装微软的虚拟机。打开DOS命令台打开MASM--->输入----->asm源文bai件du路径 例:C:\MASM.EXESource filenam [.ASM]:D:\1.ASM 源代码1.asm后显示有三个要保存的文件:OBJ二进制文件 即目标文件 LST列表文件CRF交叉引用文件后两个是中间结果,zhi直接忽略,保存目标文件就行了。
保存目标文件,即dao填写完整路径 Source filenam [1.OBJ]:D:\1 编译的OBJ文件1.OBJ 连接也一样只保存EXE,DOS打开LINKE如:c:\linke.exeObject Modules [.OBJ]:D\1 编译的OBJ目标文件路径Run File [1.exe]:d:\1 保存连接生成的EXE和文件名。