汇编语言问题

下面的程序实现一次用内存0:0-0:15单元中的内容改写程序中的数据,完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0
start:
mov ax,cs
mov ss,ax
mov sp,__
mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s:
push [bx]
________
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start

此题出自王爽的《汇编语言》第六章的检测点6.1,想问下横线处的应该填什么,在网上找到的答案是:mov sp,1ah和pop cs:[bx]
我想问各位高手,sp后的数值应该是十进制,还是十六进制。书上的一直用的是十进制,而答案上的却是十六进制。此题的sp应该是多少,为什么?
后面的pop cs:[bx],又是为什么?谢谢解答

我尝试解答,不知道能给你解释明白不:
程序中CODESEG SEGMENT语句后面定义了总共13个字,就是26个字节的空间.默认的段内偏移开始就是从0000H单元开始的.
mov ax,cs和mov ss,ax 这两条语句就是把代码段的段基址和堆栈段的段基址设置的一样了,即CS和SS的值一样.这样,给SP给的值,按一般的约定,第一给SP给值就是设置堆栈的底部,就是堆栈所占用的空间,这里只有这13个字空间是可用的,所以给SP给值就是26,换成十六进制就是001AH,这是第一个空填MOV SP,001AH这个语句的原由.
mov ax,0和mov ds,ax这两条语句使得数据段寄存器DS指向了0段,而mov bx,0使得后面的数据段内偏移指向了0偏移开始的位置.至于mov cx,8,正好是8个字的空间,从你理解的0:0到0:15正好是16个字节,8个字.
s标号后的push [bx]是指将DS指向段中,BX指向单元(第一次就是指0:0位置)将该位置的内容压栈,堆栈栈顶位置正好就是当前CS指向段中开头的26个字节空间的末位置,即最后初值为0的字的位置.
此后,POP CS:[BX],即意味着弹出时栈顶数据到了当前CS指向段中BX指向单元,注意,此时在CS段中是从SEGMENT语句下来的位置开始依次向后增加的,第一次即0123H所在位置.这是第2个空填POP CS:[BX]这个语句的原由
BX+2,意味着指针偏移,依次取了0:0到0:15的内容,8个字,按次序压到了栈顶,但因为每次都是刚压入就弹出,SP一直是刚减2就再加2,没怎么变化,实际上一直就用了当前CS指向段中开头的26个字节空间的末位置,即最后初值为0的字的位 置.就用了这一个字.而利用这个位置8次以后,就把原来0:0到0:15位置的数据拷贝到了当前CS段中从0123H数据所在位置的8个字中.
至于十六进制和10进制,楼上的朋友解答的比较全了,计算机内部只认二进制的,其他进制的最后都会转换为二进制的,这个工作有汇编程序来完成.
这没法画图,可能的话你自己画下存储空间分布与变化图,就容易理解了
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-05-26
首先.10进制跟16进制的问题.计算机只识别2进制,所以他们都要转化成2进制,所以不管你用10进制还是16进制都是可以的
比如MOV AX,0AH跟MOV AX,10是完全一样的
再次,你要知道这个的意思
mov bx,0
mov cx,8
s:
push [bx] 把BX指向的单元的内容入栈,就是数据区的内容
pop cs:[bx] 把刚刚入栈的内容出栈,送到CS:[BX]的地方
add bx,2 这样一入一出,就把原先CS:[BX]中的内容用其他数据替换掉了
loop s 当然也可以用其他方法,但这样写是最简练的一个本回答被提问者采纳
第2个回答  2008-05-26
1、数值在汇编语言的书写中可用十六进制、十进制、二进制等,只要数值准确就可以了。例:
MOV AX,10H ;十六进制
也可写为:MOV AX,16 ;十进制
也可写为:MOV AX,00010000B ;二进制
因为10H=16=00010000B

2、这道题是考你对“段”的理解和使用的。本题中的关键点是没有明显设置堆栈段,并在代码段中存放8个双字节数据,但还有5个双字节空间,其实这5个双字节空间就是作为堆栈段让你使用的。

assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0
start:
mov ax,cs
mov ss,ax ;代码段的段址赋给SS,这就要求你使用代码段中的空间作堆栈。
mov sp,26 ;代码段数据区共有26个字节空间,堆栈是从底部开始存放数据的,所以赋26。
mov ax,0
mov ds,ax ;注意DS=0
mov bx,0
mov cx,8
s:
;下面4行的作用是将DS:[bx]中的数据移到CS:[bx]中
push [bx] ;[bx]=DS:[bx]。因为DS=0,BX初值=0,所以DS:[BX]指向00:00开始的数据区。
pop CS:[bx] ;因为BX初值=0,所以CS:[BX]指向本代码段开始的数据区。
add bx,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start

几个关于汇编语言的问题 急用 谢谢
1.loop循环功能应配合哪个缓存器 CX寄存器 LOOP指令,是循环指令,循环次数由计数寄存器CX指定。是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次。执行LOOP指令时,CPU自动将CX的值减1,若CX=0,则结束循环;否则,重复执行循环体。2.汇编语言离开程序回到DOS应使用哪个IN...

高分!!汇编语言的若干问题
1、汇编语言是编译型还是解释型?(或许汇编语言不能这么表述)编译型 2、汇编语言是否像高级语言一样,即便是相同的硬件也有很多种汇编语言?一般只有一种 3、汇编语言编写的程序在不同硬件上未必通用,这是因为硬件(如cpu)机器码与功能不同,那么是否像java一样,用一种汇编语言写一次汇编源码,在...

汇编语言的问题!!!为什么书上写shr ax,3是错误的,而shr cx,1是对的...
书写错误,应该是:shr ax,3 这种表达方式,tasm编译器是支持的,它在汇编时会自动转化为3条shr ax,1,但masm编译器不支持这种用法,请在源代码中用3条 shr ax,1 替代。比如AX=1001010010101111,SHL AX,1后,AX=0010100101011110, CF=1 比如AX=0001010010101111,SHL AX,1后,AX=0010100101011110,...

汇编语言mov的问题?
1、直接就是补码。运算器里全都是按照补码来运算的。2、加法结果并未溢出,仍然是负数。3、教材中的转来转去,其实没太大意义,大概只是想让学生看看原码的样子吧。实际上咬定补码从头教到尾、从头算到尾也根本没问题。

汇编语言LENGTH的问题
等等;length返回的是长度数值,其实就是是最外层dup的数值,如果不是dup,返回的就是1。根据上面的法则,buff db 10dup(?)mov cx,length buff ﹦〉mov cx,10 对 mov cx,size buff ﹦〉mov cx,20 不对,应该是 mov cx,10 (因为buff是字节,所以type=1,size=type×length=1*10=10)...

汇编语言存储单元问题
首先,由地址表达(1280AH)知道,系统是16位的,而不是大于16位的。所以一个字点2字节。其次,由于系统是16位的,所以0ABCDH代表的是一个字,16位,2个字节,所以存储是 低位字节:CD,高位字节:AB,没有更高的位了,所以没有前面补0的情况。只有C正确(没有最下面的那个方格)。再次:如果是(...

2道汇编语言,问答案,及为什么
1、立即数只能存放在代码段中。(正确)2、间接寻址不能同时用于目的和源操作数。(正确)3、指令AND AL,0和指令MOV AL,0执行后的结果完全一样。(正确)4、字符串操作指令可以使用重复前缀来实现块操作。(正确)5、NOP指令不使CPU执行任何操作,因此执行它不需要任何时间。(正确)三、阅读下面的...

8086汇编语言DIV指令的问题
80x86 中的除法指令(如:DIV CX、DIV BL)时,是有可能溢出的。如果被除数较大,或除数较小,都可能使“商”超出预定位数,此时,就会溢出。特别是当除数为零时,必然会出现:Divide overflow。直接使用 DIV 指令,有一定的风险,一不小心就溢出了。特别是数字不明确的时候。因此,在执行 DIV ...

单片机汇编语言的几个疑问
我个人当初几乎都是这样找出的问题 大的汇编程序的调试确实比较麻烦,首先要求你对软件流程很清晰,对单片机的运行模式也要很了解。至于你现在的程序如果有问题,我建议还是采用仿真设断点的方式来找问题,尤其是如果搞单片机的时间不长的话,这样其实可能更快些。希望所说能对你有所帮助。

汇编语言指令的一些小问题
一位数,它只能表示:0~9。表示较大的数,就得用两位:0~99。两位数,可以理解成,高位、低位。两个“两位数”相加,先加低位,再加高位(还要考虑低位的进位)。--- 16 位的计算机,每次,所能处理的一个数,只是两个字节。表示较大的数,就得用两部分,高位、低位,各两个字节。书上说的...

相似回答
大家正在搜