汇编程序100例?汇编程序常用指令表
大家好,今天给各位分享汇编程序100例的一些知识,其中也会对汇编程序常用指令表进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
汇编语言的一些程序设计题,谁能举例解答一下
你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用
a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据
1、交换可以用堆栈进行,
AX。BX相互交换内容
PUSH AX
PUSH BX
POP AX
POP BX
这样AX和BX内容就交换了
2、
为了方便你理解,写一些不正确的表达式吧
MOV AX,0相当于 int a=0;
XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中
SUB AX,AX相当于 int a=1; a=a-a;所以结果也是0
AND AX,0 AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。
第三题看不懂什么意思,想问什么东西?
4、
内存复制的代码:
mov si,offset setscreen;原数据偏移地址
mov di,0;目标偏移地址
mov cx,offset setscreen_end-offset setscreen;计算出数据长度
cld;di,si每次执行movsb的时候都递增1
rep movsb;开始复制
清零:
如果数据段有一块内存需要清零
mov cx,100;//数据段长度
mov si,0;//开始地址
mov al,0;
_start:
mov byte ptr ds:[si],al;
dec cx;
inc si;//指向下一个字节
cmp cx,0;
jnz _start;//如果cx不为0事继续清空下一个内存
百度【幽灵代码论坛】加入我们一起学习
汇编语言程序设计的一般步骤是什么
一、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“EDIT.COM C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。紧接着标题行下面的是菜单行,窗口最下面一行是提示行。菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。如果键入EDIT命令时已带上了源程序文件名(C:\ASM\HELLO.ASM),在编辑窗口上部就会显示该文件名。如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。编辑窗口用于输入源程序。EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。EDIT中的编辑键和功能键符合Windows的标准,这里不再赘述。源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Save as”窗口,在这个窗口中输入你想要保存的源程序的路径和文件名(本例中为C:\ASM\HELLO.ASM)。注意,汇编语言源程序文件的扩展名最好起名为.ASM,这样能给后面的汇编和连接操作带来很大的方便。3.用MASM.EXE汇编源程序产生OBJ目标文件源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下:方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:I:>C: C:>CD\ASMC:\ASM>MASM HELLO.ASM不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Object filename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:C:\ASM\HELLO.OBJ〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Source filename),此时输入源程序文件名HELLO.ASM并回车,然后进行的操作与上面完全相同。如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。如果源文件有错误,MASM会指出错误的行号和错误的原因。4.用LINK.EXE产生EXE可执行文件在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。具体操作如下:方法一:在Windows中操作用资源管理器打开源程序目录C:\ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:I:>C: C:>CD\ASMC:\ASM>LINK HELLO.OBJ不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Run file),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:C:\ASM\HELLO.EXE〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开LINK程序时未给出OBJ文件名,则LINK程序会首先提示让你输入OBJ文件名(Object Modules),此时输入OBJ文件名HELLO.OBJ并回车,然后进行的操作与上面完全相同。如果没有错误,LINK就会建立一个HELLO.EXE文件。如果OBJ文件有错误,LINK会指出错误的原因。对于无堆栈警告(Warning:NO STACK segment)信息,可以不予理睬,它不影响程序的执行。如链接时有其它错误。须检查修改源程序,重新汇编、连接,直到正确。5.执行程序建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:C:>HELLO〈回车〉C:>程序运行结束后,返回DOS。如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。如果程序不显示结果,我们如何知道程序是否正确呢?例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。这时,我们就要使用TD.EXE调试工具来查看运行结果。此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。
如何学习汇编啊
1.学汇编的方法
应该具备的条件:--微机(80X86型微机)--MSDOS操作系统或Win95/98的"MS-DOS方式"--编程工具:文本编辑器:如 MS-DOS的 EDIT
汇编器:如 MASM.EXE 5.0版本
连接器:如 LINK.EXE
二进制转换:如 EXE2BIN.EXE
学习汇编语言实践性很强。只有经过编写大量代码才能熟练掌握。此外阅读源程序也很有帮助。
由于汇编语言是与 CPU芯片紧密相关的,所以必须针对某一机型,清楚地了解 CPU芯片及其外围
设备的硬件资料。只有这样,编写代码才能得心应手。所以有两类资料需要你去积累:一类是硬件
方面的资料和系统软件方面的资料,另一类是算法方面的经验。其他比如汇编工具等则没有多少东
西需要深究。
第一类资料,比如各种 BIOS中断,MS-DOS功能调用,Windows API库,这些可以归为系统
软件方面;而 CPU结构,端口定义,中断定义,总线方式等可归为硬件资料。
第二类资料,比如排序算法,字符串查找算法等。像搜索引擎所采用的算法,能在最短的时间
内,找出符合条件的信息,而且还带有智能性。这种查找方案包含了很科学的算法。它们都是抽象
的东西。
总之,学习汇编,你应该目的明确,而且目标机器明确,要解决的问题也明确。这样才能有
的放矢,最终有所收获。
2汇编语言基础基本指令
我们学习的对象机器是 PC机,CPU是 Intel80x86,所以先熟悉 CPU的大致结构。
其实经常用到的是 CPU的各个寄存器,其他比如引脚,内部结构等,开始时先不去管它。
由于Intel80x86各版本 CPU新的与旧的保持兼容,旧的 CPU下设计的程序无需任何修改就能在
新的CPU下运行。Intel 8086/8088的所有寄存器在后来的新版本 CPU中都保持。它们也是最
基本的 CPU寄存器。所以主要学习 Intel 8086 CPU的寄存器:
加法器 AX(AH/AL)乘法,除法,I/O,快速的算术运算
基址寄存器BX(BH/BL)基址指针(数据段)
计数器CX(CH/CL)循环,重复或位移的计数器
数据寄存器DX(DH/DL)乘法,除法,I/O
源索引SI源串和索引指针
目标索引DI目标串和索引指针
基址指针BP栈的基址指针
栈指针SP栈的当前位置指针
标志 CPU标志
指令指针IP当前指令的内存位置
代码段CS程序代码段值
数据段DS程序数据段值
栈段SS栈操作的段值
附加段ES程序附加数据段的段值
其中 CPU标志寄存器各位的含义如下:
FLAG:(相应的 BIT为 1时的含义)
CF进位位向目标操作数进位或借位
PF奇偶校验位低字节校验结果为偶校验
AF辅助进位标志低 4 bits的进位或借位标志
ZF零标志结果为零
SF负数标志结果为负数
TF单步标志(CPU)转为单步状态
IF中断标志中断响应打开(清除时关闭)
DF方向字串操作默认向下(down rather than up)
OF溢出结果过大或过小(for destination)汇编语言指令主要就是对上述各个寄存器的操作。下面这段代码是一个完整的 COM型可执行
程序文件的代码,经过编译,连接和转换后,能直接执行,结果是在彩色背景下显示一些字符。
编译后只有204 Bytes。
(你需要把这段代码完整地复制下来并另存为一个以 ASM为扩展名的文件,例如 mypro1.asm。
然后对它进行编译连结和转换,就生成一个名为 mypro1.COM的可执行文件。你只要在 DOS命令行
敲入 mypro1加回车就能看到它的执行结果。关于如何编译连结等问题以后再说。你先可以在汇编
工作室主页上下载简装工具,使用其中的 TOCOM.BAT [filename]批处理即可顺利生成COM文件。)
在这个例子中使用了几类指令:
mov寄存器,立即数;数据传输类
mov内存,寄存器;数据传输类
push寄存器;堆栈操作:入栈
pop寄存器;堆栈操作:出栈
int 10H;10H号中断(视频)
int 21H;21H号中断(功能调用)
除了这些指令外,还看到:
assume;假定
offset;求偏量
ORG;地址定位
byte ptr;字节属性
db;定义字节,内存分配
在一个完整的汇编源程序中,一般包括上述两类内容,它们分别是指令和汇编伪操作,
它们是构成源程序必不可少的成分。这些指令和汇编伪操作在用法上有许多细节,需要通
过具体的程序举例来逐步掌握。;运行环境: MS-DOS或 Windows98的 MS-DOS方式
;硬件条件:安装有 VGA或更新的显示适配器
;这是命令文件(COM)格式的程序结构,
stackseg segment stack
stackseg ends
codeseg segment
assume ss:codeseg
assume cs:codeseg
ORG 100H
Entry: mov ah,0fH;取当前显示模式
int 10
mov byte ptr cs:vMode,al
mov byte ptr cs:vPage,b
mov ah,00
mov al,03
int 10H;设置显示模式: 3
mov ah,05
mov al,00
int 10H;设置当前显示页: 0
mov ah,06H
mov ch,00
mov cl,00
mov dh,24
mov dl,79
mov bh,63
mov al,00
int 10H;清屏操作(用以指定色彩)
mov ah,06H
mov ch,10
mov cl,20
mov dh,15
mov dl,50
mov bh,00
mov al,00
int 10H;清除指定屏幕区域(用以指定色彩) mov ah,06H
mov ch,09
mov cl,22
mov dh,14
mov dl,52
mov bh,79
mov al,00
int 10H;清除指定屏幕区域(用以指定色彩)
mov ah,02
mov dh,11
mov dl,30
mov bh,00
int 10H;定位光标: 11,30
mov ah,09
mov dx,offset cs:string1
push cs
pop ds
int 21H;显示一串字符
mov ah,02
mov dh,13
mov dl,30
mov bh,00
int 10H;定位光标: 13,30
mov ah,09
mov dx,offset cs:string2
int 21H;显示一串字符
mov ah,02
mov dh,25
mov dl,00
mov bh,00
int 10H;定位光标:25,00(即隐藏光标)
mov ah,00
int 16H;等待键盘输入
mov ah,00
mov al,byte ptr cs:vMode
int 10H;恢复显示模式
mov ah,05
mov al,byte ptr cs:vPage
int 10H;恢复当前显示页
mov ah,02
mov dh,24
mov dl,00
mov bh,00
int 10H;恢复光标: 24,00
mov ah,06H
mov ch,00
mov cl,00
mov dh,24
mov dl,79
mov bh,07
mov al,00
int 10H;清屏 mov ax,4c00H
int 21H;结束程序,返回 MS-DOS提示符
String1 db'Can you see it?$'
String2 db'Any key to exit$'
vMode db?
vPage db?
codeseg ends
end Entry----------------------------------------------------------------------------------------
好了,关于汇编程序100例和汇编程序常用指令表的问题到这里结束啦,希望可以解决您的问题哈!