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