【1】
assume cs:code
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov ax,stack;0 1 2
mov ss,ax ;3 4 把栈段地址给ss
mov sp,16 ;5 6 7 栈偏移为16
mov ds,ax ;8 9 数据段的段地址和栈段地址相同
mov ax,0 ;a b c
call word ptr ds:[0eh] ;d e f 10 push ip 压栈 为11h 再 jmp word ptrds:[0eh]
;就是把ip 11h 压栈到 stack 栈段中的 0eh 然后 读取 这栈段地址存储的11h这个数据 然后程序继续执行
inc ax ; 11h
inc ax
inc ax
mov ax,4c00h
int 21h
code ends
end start
答 (ax)= 3
【2】
assume cs:code
data segment
dw 8 dup(0) ;定义八个字 s标号ip cs 0 0 0 0 nop指令的ip cs 0 ~ f
;目的:程序运行完 之后 ax,bx的值为多少?
data ends
code segment
start: mov ax,data
mov ss,ax
mov sp,16 ;初始化 栈 和 数据段 这里的数据和栈用的同一个段
mov word ptr ss:[0],offset s ;把s标号的ip写到数据段里的开始
mov ss:[2],cs ;将程序当前cs的数据 写到内存 ss:[2]里面去
call dword ptr ss:[0]; ip指向nop标号 》 push cs (此时的数据段也就是栈末尾的数据为 cs)》push ip 此时数据段0ch处的数据为 nop指令的ip 》;jmp dword ptr ss:[0] 跳过nop 执行标号s的指令
nop
s:mov ax,offset s ;取得当前s标号的ip
sub ax,ss:[0ch];当前s标号的ip 减掉 nop指令的ip ax,为1
mov bx,cs ; (bx ) = (cs)
sub bx,ss:[0eh] ;此时数据0eh的数据为 cs cs 减掉cs为0
mov ax,4c00h
int 21h
;ax为1 bx为0
code ends
end start
答: (ax) = 1 (bx) =0
- [游客] 兄弟,现在汇编网似乎不能登录了 加油阿 12/28 17:05
- [tom7370] 兄弟,都一个月了。。。 08/16 18:12
- [tom7370] 怎么没动静了? 08/05 17:18
- [tom7370] 自愧不如啊 07/18 17:22
- [tom7370] 你的学习进度比我快多了哩 我用了将近6个月才学完这本书。。。 不像网站上说的2个月。。。。 07/18 17:20
- [mr_crbn] 啊 我佛了 这个 缩进 我在notepad++ 缩进的好好的, 07/14 14:44
- [mr_crbn] 第3题的第五小题 用到了 [bx+32] 我是实际测试过了 可以用的 就用了 其实不用这种方法 07/12 19:25
- [tom7370] 加油! 07/12 12:03
- [tom7370] 你对第二问的理解似乎不对 题目的意思大概是要你写出指令的执行过程 07/06 09:00
- [mr_crbn] 非常感谢你,我理解的确实不对 我以为一个存储器的是有固定的存储单元,笔记已经改正了 06/30 17:45
- [tom7370] 你还真是牛逼,几天就搞完我几个星期搞完的东西。 07/04 22:33