body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;}

assume cs:codesg
codesg segment                  ; codesg 段开始
start:   mov ax , 0123
           mov bx , 0456
           add ax , bx
           add ax , ax
 
           mov ax , 4c00
           int 21h                       ;后面两条指令实现程序返回,交还控制权
codesg ends                      ;codesg 段结束
end
定义了一个 codesg 的段,这个段中存放我们的代码,开头伪指令用 assume 将用做代码段的段 codesg 和 CPU 中的段寄存器 cs 联系起来。

1、伪指令:汇编语言中包含两种指令,汇编指令和伪指令;汇编指令是有对应机器码的指令,可以被编译为机器指令,最终为 CPU 所执行。而伪指令没有对应的机器指令,最终不被 CPU 所执行。伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。
XXX segment   ;XXX 段开始
    :
    :
    : 
XXX ends          ;XXX 段结束
segment 和 ends 是一对成对使用的伪指令 ,这是写可被编译器编译的汇编文件时,必须要用到的一对伪指令。segment 和 ends 的功能是定义一个段,segment说明一个段的开始,ends说明一个段的结束。


一个汇编程序由多个段组成,这些段被用来存放代码、数据、或当作栈空间来使用。一个源程序中所有将被计算机所处理的信息:指令,数据,栈,被划分到了不同的段中。
end 一个汇编程序的结束标记,编译器在编译汇编程序的过程中,如果碰到伪指令 end ,就结束对源程序的编译。
assume “假设”,它假设某一段寄存器和程序中的某一个用 segment ... ends 定义的段相关联。通过这种关联,需要的情况下编译程序可以将段寄存器和某一个具体的段相联系关联起来。

2、源程序中的“程序”
  这里的程序只源程序中最终由计算机执行、处理的指令或数据;伪指令由编译器来处理,不算这里的“程序”;
3、标号
  eg: “codesg” ;一个标号指代了一个地址。“codesg”做为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。
4、程序的结构
  源程序由一些段构成,这些段中存放着代码、数据或将某个段当做栈空空间。
eg: 编程运算 2^3
①定义一个段叫做“abc”;
②段中写入汇编指令;
③指出程序在哪里结束;
④adc 当作代码段来用;(对于这个例子非必须)
为了程序运行结束能交出cpu控制权,应该在最后加上中断  返回;在同edit编辑代码的时候可以在数后面加上h,不加会出错
assume cs:abc
abc segment
       mov ax , 2
       mov ax , ax
       mov ax , ax
       mov ax , 4c00h
       int 21
abc ends
end
5、语法错误和逻辑错误
  语法错误编译器可以发现,逻辑错误编译器发现不了,等到运行时出bug;




编辑源程序
(需要下载一个edit.com文件,类似debug.exe)
文件写完后可以 File-》Save as 保存到刚才 mount 的文件夹
编译
(需要下载一个 masm 5.0 汇编编译器,文件名为 masm.exe)
连接
(需要下载一个LINK.exe文件)
**操作系统外壳(shell):任何通用的操作系统,都要提供一个称为shell的程序,用户(操作人员)使用这个程序来操作计算机系统进行工作。

调试跟踪汇编程序
ds 存放 PSP 的段地址,偏移为 0,所以程序的物理地址就是 SA*16+0+256=SA*16+16*16+0=(SA+16)*16+0;
最终就是:SA+10:0  
DS=075A , PSP 的地址就为 075A:0 ; 程序的地址就为 CS:IP = 076A:0
q 命令退出debug

programing的更多相关文章

  1. Android Programing 学习笔记(一)

    最近学习android 开发,拜读android programing,一步一步学习.囫囵吞枣,现已看到第十八章.今天把最近的学习过程中学到的一些内容进行一下总结. 一:Fragment 和 Acti ...

  2. lua 初接触 --- The first time use Lua for programing

    The first time use Lua for programing Wang Xiao 1. 关于 lua 的变量类型:  lua 变量的定义与matlab有点不同: local d , f ...

  3. AOP 面向方面的编程 Aspect Oriented Programing --第一次听说呢,汗!

    http://wayfarer.cnblogs.com/articles/241024.html 抄在这里,方便复习! AOP技术基础   1.引言2.AOP技术基础 3.Java平台AOP技术研究4 ...

  4. 1.3 History of Android Plug-in Programing

          In July 27, 2012 , it was the first milestone in Android plug-in technology. Yimin Tu(mmin18 o ...

  5. Chapter 1: Plug-in programing from past to the future

    It is the best time. Although the internal API of Android not allowed to be modified by google play, ...

  6. 动态规划——DP算法(Dynamic Programing)

    一.斐波那契数列(递归VS动态规划) 1.斐波那契数列——递归实现(python语言)——自顶向下 递归调用是非常耗费内存的,程序虽然简洁可是算法复杂度为O(2^n),当n很大时,程序运行很慢,甚至内 ...

  7. Socket programing(make a chat software) summary 1:How to accsess LAN from WAN

    First we should know some basic conceptions about network: 1.Every PC is supposed to have its own IP ...

  8. First step to Signal —— in Linux C Programing

    1. What's signal 信号是软件中断,提供了一种处理异步事件的方法.(见<Unix环境高级编程>)一般使用时需包含 signal.h 库. 每个信号命名由SIG开头,实际值为正 ...

  9. expert C Programing notes

    1.寻常算术转换 在运算中 如果其中一个操作数是long double 则另一个转为long double,其次 如果有一个为double 则另一个转为double,再次 float . unsign ...

  10. programing Python --Sys module

    Recall that every python module has a built_in __name__ variable that python sets to the __main__ st ...

随机推荐

  1. angular4.0单个标签不能同时使用ngFor和ngIf

    这个问题估计是ng4严格了语法规范的原因. 介于这篇太短,附上图助助兴致 解决办法: <div *ngFor="表达式"> <ng-container *ngIf ...

  2. 简单认识python cmd模块

    0X00 前言 在早前用别人的工具时,发现有些大佬会用到交互式shell,那时候就挺好奇的,但是一直都没有看一下怎么做到的. 今天在翻p牛的博客的时候,看到他早之前写的一个工具就有用到交互式shell ...

  3. 2018年1月 mybatis+ 动态sql连续日期

    2018-01-111 .   如何在项目中快速查找对应的mapper.xml文件 从Controller入手,使用(Ctrl+鼠标左键)找到Service调用的方法,再找到底层方法,就能找到对应ma ...

  4. TypeScript体验

    TypeScript 在线玩 http://www.typescriptlang.org/play/index.html ts最终编译成js  网站最终还是要引用js.  ts面向对象的感念更加直观, ...

  5. View 动画 Animation 运行原理解析

    这次想来梳理一下 View 动画也就是补间动画(ScaleAnimation, AlphaAnimation, TranslationAnimation...)这些动画运行的流程解析.内容并不会去分析 ...

  6. dict-命令行下中英文翻译工具

    命令行下中英文翻译工具(Chinese and English translation tools in the command line) 安装(Install) ubuntu 安装 pip sud ...

  7. 系统启动时,dts怎么被加载的?

    转:http://blog.csdn.net/lichengtongxiazai/article/details/38941913 此文章针对高通msm8953平台,启动过程中,bootloader( ...

  8. JavaScript获取当前url路径

    1.假设当前页完整地址是:http://localhost:61768/Home/Index?id=2 //获取当前窗口的Url var url = window.location.href; //结 ...

  9. 云计算之路-阿里云上:docker swarm 集群故障与异常

    在上次遭遇 docker swarm 集群故障后,我们将 docker 由 17.10.0-ce 升级为最新稳定版 docker 17.12.0-ce . 前天晚上22:00之后集群中的2个节点突然出 ...

  10. 用户空间网络提升 NFV 的性能

    本文是一篇翻译,翻译自https://software.intel.com/en-us/blogs/2015/06/12/user-space-networking-fuels-nfv-perform ...