用内存0:0~0:15单元中的内容改写程序中的数据

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:16:35
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

请问mov cs:[bx],ax 为什么出来一个CS? 没有 mov cs:[bx],ax 刚好把八个单元中的值累加到AX,然后怎么个情况啊。。迷茫了。。。拜托各位说的详细点。
问题为:下面的程序实现一次用内存0:0~0:15单元中的内容改写程序中的数据。

mov指令,不是累加,而是传送。

程序把数据段0:0~0:15单元中的内容逐字(双字节)读出,然后写到代码段对应的偏移位置,从而达到改写程序中数据的目的。

根据原程序设计思路,所填指令必须是:mov cs:[bx],ax。
指令mov ax,[bx] 从数据段读出一个字,
指令mov cs:[bx],ax把这个字写到代码段对应的偏移位置
mov cs:[bx],ax的目的操作数是基址寻址,默认的段寄存器是数据段寄存器,若要写到其它段,必须加段寄存器前缀。因为要把数据写到代码段,所以,必须在目的操作数前面加上代码段寄存器前缀。

但,这段程序未等执行完毕就会产生不可预料的结果。因为程序主题指令很短,未等执行完毕,就被改写,继而导致结果不可预料。

给定一个存放数据的内存单元的偏移地址是11A8H,(DS)=0F49CH,求出该内存单元的物理地址 内存中自TABLE开始的10个单元中连续放着自0至9的平方值。任给一个数X(0<=X>=10),该数存于XX单元中, 用汇编语言编程查找内部RAM的32H~41H单元中是否有0AAH这数据,若有则将50H单元置为0FFH,否则50H单元为0? 《微计算机技术》问题:给定一个存放数据的内存单元的偏移地址是20C0H,(ds)=0c00eh,求物理地址 请问如何将c中的一个变量值直接送入到一个指定的地址单元如0x3000当中去? mov 内存单元 内存单元 这个成成立吗? 编一程序,将片内RAM单元60H~6FH单元分别置成00H,01H,……,0FH。(循环体系) c语言中内存单元的地址是用什么进制表示的 c++中引用占用多少内存单元 汇编:统计BUFFER为起始地址的连续200个单元中0的个数