DosBox下的debug信息解释

073F:0100 0000        ADD    [BX+SI],AL                       DS:0110=00 

没有载入程式,DEBUG只是显示原来内存的资料

2000:0代表cs:ip

B8204E代表cs:ip指向的机器指令是 B8204E,对应的汇编就是 mov ax,4e200

cs:ip决定了cpu从哪里读指令。

最左边是内存的起始地址,中间以十六进制的形式显示内存值,最右边是以ASCII码的形式显示内存值。每行最多显示16个字节的内容

详情参考:汇编的Debug使用指南

https://www.jianshu.com/p/843661407333 

 

无限循环的汇编代码:

先从2000:0003跳到1000:0003

程序往下走到1000:0006,通过jmp bx    此时bx为0

又跳到了1000:0000

程序在1000:0000~1000:0006之间无限循环

ascII码是用数字代表字符。

 

mov ss:ax

mov sp:128

分配一个栈空间(画一个箱子);

栈的容量是128=80H,就是128个字节(能存32个整数)

字节表示时,十六进制范围为00H~FFH,对应的无符号数的范围为0~255,对应的带符号数的范围为-128~+127。
字表示时,十六进制范围为0000H~FFFFH,对应的无符号数的范围为0~65535,对应的带符号数的范围为-32768~+32767。
 

80H为-128是指用字节表示带符号数的情况。

 

H表示十六进制数,D表示十进制数,B表示二进制,Q或O表示八进制……

 

mov sp,0080

call 001c

执行函数跳转的时候,他会将0080入栈,函数的入口地址保存到栈中

 

入栈是栈的偏移指针做加法,0加到128

出栈是栈的偏移指针做减法,从128减到0

所以栈的顺序是先入,后出

2000->2012->2014->2016->2018->2020   入栈 

2020 ->2018-> 2016-> 2014-> 2012-> 2000 出栈

 

 

assume cs:code,ds:data

data segment
      db  'welcome to hello'
      db  '................'
data ends

code segment
  start: mov ax,data
         mov ds,ax
	 mov si,0
	 mov di,16
	 mov cx,8
cpystring: mov ax,ds:[si]
           mov ds:[di],ax
	   add si,2
	   add di,2
	   loop cpystring
      mov ax,4c00H
      int 21H

code ends
end start

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值