美文网首页
汇编笔记2(编程)

汇编笔记2(编程)

作者: AlunX | 来源:发表于2018-06-01 01:27 被阅读0次

第4章(第一个程序):

用到的工具:MASM.exe  LINK.exe

伪指令:编译器处理

例:

    assume cs:codesg(定义一个代码段名称)

    codesg segment(代码段) 

    start: 汇编语句

    codesg ends(配合结束)

    end

assum假设关联

start :入口(可以自己命名)

编译->可执行文件(pe)

int  中断

结束:

    程序返回:mov ax,4c00        int  21

    段结束:ends

    程序结束:end

加分号可以不用设置过程

编译:masm 文件名(加分号可跳过中间过程)

连接:link 文件名(obj文件,加分号可跳过中间过程)

简单方法:ml 文件名(编译并连接)(要有ml.exe)

psp:存放dos和程序交互命令100H,ds偏移psp后是cs:ip

另:1.dos是单任务操作系统

        2.dos修改了CS:IP使程序运行

      3.debug装入内存会在cx中存储长度

实际操作遇到的问题:

    1.non-digit in number:应当在十六进制数后加H

    2.debug默认十六进制。

第5章([bx]和loop循环):

[bx]指令:主要因为在文本编辑和debug中不一样,文本编辑中[常数]相当于常数,所以要先存到bx才表示偏移地址。

():描述符号,表示括号内的内容

idata:描述符号,表示一个常量

loop和cx:loop循环直到cx减为0(通常)

loop语句用法:跳转到s标签循环.(在之前设置s标签(s:代码))

编程考虑过程:是否安全(存放位置)->是否能存下结果->初始化(ds,cx,ss等)->调用循环->结束

段前缀:显式给出段地址(cs: ds: ss:)(ds寄存器的作用可以用es:[ ]替代)

安全空间(底层而不冲突的空间):0:200~0:2ff

另:1.执行循环最好把mov cx ,idata放在要循环的部分前

        2.汇编源程序中数据不能以字母开头,在前面加0

        3.不同段可以再用一个段寄存器

编程中的问题:

        1.loop语句在要循环的语句之后

        2.源程序中地址表示形如ds:[idata]

        3.注释采用';'

第6章(多个段的程序):

解决的问题:既要有代码又有数据

1.不使用多个段:

例:

assume cs:code

code segment

          dw 123ah,34d3H

start:mov ax,cs;设定栈

        mov ss,ax

        mov sp,0004;偏移地址为dw之和(因为数据从0开始所以直接相当于dw长度和)

        mov bx,0

        mov ax,4c00h

        int 21h

code ends

end start

db :定义字节型数据(8)--->dw:定义字型数据(16)--->dd:定义双字结构(32)

        既可以用来设置内存值,又可以用来分配内存。

直接放在代码段,段地址CS,偏移地址在最开始为0

设定start(见前面)入口使cpu区分数据和代码。--->end可以通知入口是谁

2.使用多个段:

assume cs:code,ds:data,ss:stack

data segment

          dw 1234h,2334h

data ends

stack segment

        dw 0,0,0,0,0,0,0,0

stack ends

code segment

start: mov ax,stack;stack,data,code都是存有段地址的常量

        mov ss,ax

        mov sp,10h;stack段的dw之和

        mov ax,4c00h

        int 21h

code ends

end start

另:

        1.不同段段地址相差至少1

实验暴露的问题:

        1.段地址是10倍

        2.loop后面要跟段标签

        3.不能直接把段标签拿来用,要放到段寄存器里才能用

相关文章

  • 汇编笔记2(编程)

    第4章(第一个程序): 用到的工具:MASM.exe LINK.exe 伪指令:编译器处理 例: assu...

  • 汇编程序基础

    汇编程序基础 一、汇编程序基本结构 二、汇编指令 1.汇编指令基本结构 三、伪指令 1.段定义 2.数据定义 数据...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 【笔记】《Linux C编程一站式学习》第17章 x86汇编程序

    第17章 x86汇编程序基础 本文是看17章的笔记。方便自己回顾。汇编基础知识可以看王爽的《汇编语言》本文环境我用...

  • 【文魁大脑读书会】22/60马帅《深入理解linux》

    阅读时间:2015年11月2日 阅读技巧:阅读书的目录 阅读笔记: boot/目录下的三个汇编程序,其中包括磁盘引...

  • 第3章 使用masm

    1. win32汇编程序的结构 例子 程序的结构 2. 调用API 在DOS汇编程序中,使用软中断来调用系统api...

  • 七.第一个程序

    汇编程序的步骤:1.编写代码2.编译,链接3.调试运行 debug模式下的数组是16进制,但是我们在编写汇编程序的...

  • 汇编笔记(2)

    (1) DS 寄存器 :通常用来存放要访问数据的段地址 [adress]:[...]表示一个内存单元,adress...

  • C语言到汇编-入门

    上一篇已经得到了C语言入门程序对应的汇编程序。C语言程序: 编译后的汇编程序: 先看汇编程序的第一行: 好像没见过...

  • 链接

    原文 1. 编译系统 预处理阶段:处理以 # 开头的预处理命令;编译阶段:翻译成汇编程序;汇编阶段:将汇编程序翻译...

网友评论

      本文标题:汇编笔记2(编程)

      本文链接:https://www.haomeiwen.com/subject/yythsftx.html