(1)下面的程序实现一次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start:mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:mov ax,[bx]
mov cs:[bx],ax
-----------------
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
(2)下面的程序实现一次用内存0:0~0:15单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内。完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0
start:mov ax,cs
----
mov ss,ax
mov sp,14h
-----
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:push [bx]
pop cs:[bx]
-------------
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
- [qiangzi] ;(因为bx+1,要等于0,所以第2个字节要为0) 这话好像有点错误吧,是不是第2,3个字节为0啊 01/21 19:23
- [ryan1779] 是啊,后来发现写 mov [bx+2],cx 就好了 08/11 22:36
- [tinyparticle] 第(2)中有错误,mov [bx+2],0b83h此条指令中的0b83h是博主debug中的默认段地 07/31 18:22
- [ryan1779] 感谢ls几位的热心解答,总于搞出来了。 mov ax,0a8h[bx],bx出错了,又多用了个寄存 07/28 10:58
- [younggay] 上面的地址计算看明白了,是手动计算的,没什么问题。呵呵 不过,我跟踪了一下,你的程序在寻址想内 07/27 10:11
- [younggay] mov ax,0a8h[bx] =================== 怎么是0a8H的起始 07/27 09:53
- [younggay] 除法溢出,说明做运算的两个数据可能有点问题。你单步跟踪,看看到底是哪里出现溢出,看一下此时的两个数据 07/27 09:45
- [tinyparticle] mov ax,0a8h[bx] mov es:0ah[bx],ax 这里好像 07/26 20:04
- [游客] 程序第一行的assume写错了,编译出错,修改后程序运行正确。 07/20 09:37
- [ryan1779] 现在的理解是,16字节内的(包括16字节,算一个段,10H),超出16字节,但不超出32字节的,也算 07/19 15:52