汇编学习--第三天

Posted mayfly-nymph

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编学习--第三天相关的知识,希望对你有一定的参考价值。

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

 

以上是关于汇编学习--第三天的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言 王爽第三版学习笔记目录+习题解析+实验

汇编学习第三章

汇编原理的学习(零)

汇编学习之路--目录

20145331 《信息安全系统设计基础》第5周学习实践部分总结及代码分析

汇编语言第三章总结