zoukankan      html  css  js  c++  java
  • 汇编学习--第三天

    4.1 一个源程序从写出到执行的过程

    汇编语言源程序包含两种指令:

    • 1.汇编指令
    • 2.伪指令

    汇编指令会被编译为机器指令,被CPU执行

    伪指令不会,会被编译器执行

    assume cs:codesg
    codesg segment
            mov ax,0123h
            mov bx,0456h
            add ax,bx
            add ax,ax
            
            mov ax,4c00h
            int 21h
            
    codesg ends
    end

    segment和ends的作用是定义一个段

    codesg segment ;定义一个名叫codesg段的开始
    
    codesg ends ;“codesg”段结束

     

    end伪指令标记整个程序的结束

    assume将有特定用途的段和相关的段寄存器关联起来

    程序最先以汇编指令的形式存在源程序中,经编译,连接后转变为机器码,储存在可执行文件中。

    “codesg”为标号,最终将被编译,连接为一个段的地址

    mov ax,4100h
    int 21h

    所实现的功能就是程序返回

    问题4.1

    DOS中直接直接执行test.exe,是正在运行的command,将test.exe中的程序加载进内存

    command设置CPU的CS:IP指向程序的第一条指令,从而使程序运行

    程序运行结束之后,返回到command,CPU继续执行command

    command程序在DOS中称为命令解释器

    debug中调试程序时,cx中存储的是程序长度

    PSP是程序段前缀

    ds的地址即PSP的地址,DS=129E,则PSP=129E:0,所以程序的地址为129E+10:0=12AE:0=CS:IP

    实验3 编程,编译连接,跟踪

    (1)(2)

    (3)

    第五章 [BX]和loop指令

     完整描述一个内存单元:1.内存单元的地址 2.内存单元的长度

    用“()”表示一个寄存器或者一个内存单元中的内容

    “()”可以有:1.寄存器名  2.段寄存器名 3.内存单元的物理地址

    idata表示常量

    mov ax,[idata] =  mov ax,[1]     mov ax,[4]...    ;合法
    mov ax,idata = mov ax,1    mov ax,2...        ;合法
    mov ds,idata = mov ds,1...        ;非法

    问题 5.1

    21000H BE
    21001H 00
    21002H BE
    21003H 00
    21004H BE
    21005H BE
    21006H BE
    21007H  

    inc 表示寄存器中的内容加1


    5.2 Loop指令

    计算2^2

    assume cs:code
    code segment
            mov ax,2
            add ax,ax
            
            mov ax,4c00h
            int 21h
    code ends
    end

    计算2^10=0400h=1024

    assume cs:code
    code segment
            mov ax,2
            mov cx,9
    s:        add ax,ax
            loop s
            
            mov ax,4c00h
            int 21h
    code ends
    end

    s为标号,标号代表一个地址

    执行loop s进行:

    • 1.(cx) = (cx) - 1;
    • 2.判断cx中值是否为0,不为0跳转标号处执行,为0接着执行下一句指令

    问题 5.2

    assume cs:code
    code segment
            mov ax,0
            mov cx,236
    s:        add ax,123
            loop s
            
            mov ax,4c00h
            int 21h
    code ends
    end

     

    问题 5.3

    assume cs:code
    code segment
            mov ax,0
            mov cx,123
    s:        add ax,236
            loop s
            
            mov ax,4c00h
            int 21h
    code ends
    end
  • 相关阅读:
    统计代码测试覆盖率-Python
    第一篇
    svn统计代码行数(增量)
    android多渠道打包
    解决Error:All flavors must now belong to a named flavor dimension. Learn more at...
    Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{...
    解决Android编译时出现aapt.exe finished with non-zero exit value 1
    自定义Json解析工具
    Process 'command 'D:jdk8jdkinjava.exe'' finished with non-zero exit value 2
    C:Program FilesJavajdk1.7.0_79injava.exe'' finished with non-zero exit value 1
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11055443.html
Copyright © 2011-2022 走看看