汇编学习
hello-world2016
热爱Linux和开源, 喜欢编程,看书, 听音乐 和篮球。
展开
-
计算指令长度(汇编)
指令长度与寻址方式有关系,规律或原则如下:一、没有操作数的指令,指令长度为1字节。如es:ds:cbwxlat等。二、操作数只涉及寄存器的指令,指令长度为2字节。如mov al,[si]mov ax,[bx+si]mov ds,ax等。三、操作数涉及内存地址的指令,指令长度为3字节。如mov al,[bx+1]mov ax,[bx转载 2012-05-27 15:36:26 · 1800 阅读 · 0 评论 -
用VIM来配置HLA的语法高亮
1.下载:hla.vim:https://github.com/jmahler/hla.vim/blob/master/syntax/hla.vim2. 在家目录下修改或建立一个:~/.vimrc:加入:syantax enable。3. 将下载好的hla.vim文件放入到$VIMRUNTIME/syantax/ 目录下4.在$VIMRUNTIME/下找到filetype.vim文件,原创 2012-09-19 12:21:14 · 890 阅读 · 0 评论 -
HLA输出数组
program yang;#include ( "stdlib.hhf" )static i: int32; @nostorage; int32 0, 2, 4, 6;var index: int32; tmp: int32;begin yang; mov(&i, eax); mov(0, esi);原创 2012-09-19 18:26:22 · 752 阅读 · 0 评论 -
HLA取出字符串中的每一个字符
program yang;#include ( "stdlib.hhf" )static Astring: string := "yangzhiyong";begin yang; mov(Astring, eax); mov(0, dl); mov( (type str.strRec [eax]).length, ecx);原创 2012-09-19 21:56:55 · 716 阅读 · 0 评论 -
HLA中第二版的错误
1。在P169~P170页中的字符串比较的返回值是在 @c 中而不是在EAX中。(不过,这点在官方的帮助文档里已经有说明了)procedure str.eq( src1:string; src2:string ); @returns( "@c" );原创 2012-09-20 08:18:12 · 1206 阅读 · 0 评论 -
HLA判断字符串是否相等
program strDemo;#include ("stdlib.hhf");static string1: string; string2: string;begin strDemo; str.alloc( @size(char) * 16 ); mov(eax, string1); stdout.put("Enter Stri原创 2012-09-20 08:32:06 · 808 阅读 · 0 评论 -
HLA中的数组与地址
1. 在HLA中(不是官方说的,而是自己探讨的,不知道正不正确^_^),数组的地址是数据的第一个字节的地址。2。如果数组的单位是字节,则首地址也是第一个数据的地址。即首地址的内容与第一个数据的内容是相同的。4。否则数组的首地址不是第一个数据的首地址,但是有规律的:第一个数据的地址=数组的首地址+(@size(声明数组时的数据类型));下图:声明为byte(字节)的数组的内存地址图:原创 2012-09-20 09:46:55 · 658 阅读 · 0 评论 -
HLA中的记录
program recordDemo;#include ("stdlib.hhf")type Student: record sname: string; sage: int32; endrecord;var Me: Student;begin recordDemo; str.alloc( @siz原创 2012-09-20 12:49:31 · 722 阅读 · 0 评论 -
HLA中的函数及调用
program procedureDemo;#include ("stdlib.hhf")static inputString: string; procedure sayHelloWorld( hello:string ); begin sayHelloWorld; stdout.put("hello, ", hello,原创 2012-09-21 13:12:59 · 851 阅读 · 0 评论 -
VC中使用C内联汇编小例子
#include int main() { int x = 1; int y = 1; int z = 0; __asm { xor edx,edx ;edx=0 add edx,x ;edx +=x add edx,y ;edx +=y mov z,edx ;z=edx } printf("From ASM inline C: \n"); printf("原创 2012-11-19 10:10:12 · 1031 阅读 · 0 评论 -
Intel汇编写的斐波那契数
includelib kernel32.lib includelib user32.lib includelib Irvine32.lib .386.model flat,stdcall.stack 4096ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO.datafirst DWORD 1;初始化第一个数为1t原创 2012-09-27 00:02:55 · 1142 阅读 · 0 评论 -
程序员十戒
1. 保持清醒头脑(不要急躁)2. 充分休息好再工作(劳累时不要编写程序)3. 程序应该简单、优美(Kiss, 即Keep It Simple, Sweetie)4. 互助互利5. 学习掌握语言规则6. 熟悉开发环境和工具7. 理解问题的本质8. 分阶段开发和测试程序9. 早保存/勤保存10原创 2012-08-25 14:25:35 · 698 阅读 · 0 评论 -
Win32汇编之HelloWorld
.386.model flat, stdcalloption casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.lib .dataszCaption db '标题',0szText db 'Hello原创 2012-06-17 20:51:08 · 1133 阅读 · 0 评论 -
第一个DOS中断处理程序(中断号为0)
assume cs:codesgcodesg segment start: mov ax, cs ;设置中断要执行的代码段 mov ds, ax mov si, offset do0 ;设置中断代码的开始位置 mov ax, 0 ;设置要复制到的目的地址处 mov es, ax mov di, 200H mov cx, offse原创 2012-06-10 10:55:45 · 971 阅读 · 0 评论 -
安装DOS中断处理程序
mov ax, cs mov ds, ax mov si, offset 中断处理程序的开始偏移地址 mov ax, 0 mov es, ax mov di, 200H mov cx, offset 中断处理程序的结束偏移地址 - offset 中断处理程序的开始偏移地址 cld rep movsb mov ax, 0 mov es, a原创 2012-06-10 17:36:39 · 823 阅读 · 0 评论 -
DOS汇编显示当前时间
assume cs:codesgdatasg segment format db 'yy/MM/dd HH:mm:ss','$' yMdHms db 9, 8, 7, 4, 2, 0datasg endscodesg segment start: mov ax, datasg mov ds, ax mov si, offset format mov di, o原创 2012-06-10 21:33:17 · 1338 阅读 · 0 评论 -
学习汇编的重要意义!!
几日前,在一位仁兄的blog里看到如下一番话:其实我发现中国的教育还是有很大问题的,你们得让你们的学生认识到这门课的作用啊,有些师兄说到出去工作了才发现汇编的作用。 我觉得值得庆幸的是这位仁兄在在校期间的学习中及时地意识到了汇编的重要性,并做出了正确的选择。然而这位仁兄提到的“老师没有让学生认识到汇编的重要性”和“有些师兄工作了才发现汇编的重要性”这些在计算机专业教育中存在的客观事实,再次转载 2012-05-25 16:43:56 · 1169 阅读 · 0 评论 -
Debug中标志寄存器的查看
IP寄存器之后的顺序依次为:溢出标志OF(Over flow flag) OV(1) NV(0)方向标志DF(Direction flag) DN(1) UP(0)中断标志IF(Interrupt flag) EI(1) DI(0)符号标志SF(Sign flag) NG(1) PL(0)零标原创 2012-05-25 22:16:28 · 2323 阅读 · 0 评论 -
汇编语言的Hello World
;将codesm段与cs寄存器关联, 将data段与ds寄存器关联assume cs:codesg, ds:data;data段定义的开始data segment ;定义一个word类型的变量hello,注意,必须要以'$'结束 ;这是由DOS系统调用决定的。 ;在使用9号功能调用时,应当注意以下问题。原创 2012-05-25 16:14:41 · 1601 阅读 · 0 评论 -
汇编常用的DOS功能调用
汇编常用的DOS功能调用:常用的DOS功能调用:1.键盘输入并显示(1号功能调用)格式: INT 21H功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是Ctrl+Break组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中2.键盘输入但不显示格式: MOV AH, 08H原创 2012-05-25 16:03:19 · 13557 阅读 · 0 评论 -
Windows汇编带颜色显示Hello World
;将codesm段与cs寄存器关联, 将data段与ds寄存器关联assume cs:codesg, ds:data;data段定义的开始data segment ;定义一个word类型的变量hello,注意,必须要以'$'结束 ;这是由DOS系统调用决定的。 ;在使用9号功能调用时,应当注意以下问题。原创 2012-05-25 16:39:42 · 1032 阅读 · 0 评论 -
Win32汇编开发环境
1.下载masm32 SDK2.添加环境变量: path="c:\Masm32\; c:\Masm32\bin;" lib="c:\Masm32\lib" include="c:\Masm32\include"3.编译文件 : ml /c /coff **.asm4.链接文件: link /subsystem:windows原创 2012-06-17 20:49:44 · 600 阅读 · 0 评论 -
Linux X86_64下的32位汇编环境
1.汇编: as -32 -o hello.o hello.s 2.链接: ld -dynamic-link /lib/ld-linux.so.2 -lc -melf_i386 hello.o -o hello原创 2012-11-22 15:55:02 · 1253 阅读 · 0 评论