这几道题目网上就有答案和解析 , 顺序不一样
一、能够将ax中的内容送到内存0000:0200H处的指令序列是 3 。
1、 mov ds,0
mov bx,200h
mov [bx],ax
2、 mov ax,200h
mov ds,ax
mov bx,0
mov [bx],ax
3、 mov ax,20h
mov ds,ax
mov bx,0
mov [bx],ax
4、 mov bx,20h
mov ds,bx
mov bx,0
mov [bx],ax
解析:答案1明显错误了,不能将立即数送入段寄存器;答案2也不对,将200送入ax,mov ax,ds明显将此时的地址设置为0200:0000,物理地址为2000,和0000:0200的的物理地址不一致;答案3因为题目要求将ax值送入内存,而它一开始就改变了ax的值,所以不对;答案4正确,用bx来暂存数据
二、下列说法正确的是: 4 。
1、 数据段和代码段的段地址不能相同。
2、 指令mov ax,bx执行完后bx中的值为零。
3、 一个栈段的大小可以设为任意值。
4、 当SP=0时,再次压栈将发生栈顶超界,但压栈操作有效。
解析:答案1错误,因为所谓的段,不过是人为安排的,对于计算机来说,指令和数据没有任何区别,地址可以相同;答案2错误,mov指令,是不情况原寄存器里面的值的;答案3也不对,栈段须有一个段地址,段地址不能变,只有偏移地址可以变,这个大小是有范围的;答案4正确,SP=0时,压榨,SP=SP-2,产生了超界
三、下列指令的书写正确的是: 3 。
1、 push al
2、 mov cs:[0],ds:[10]
3、 pop si
4、 mov ds:[0],2
解析:答案1错误,压堆指令一次性操作一个字;答案2错误,内存空间之间不能互相传送;答案3正确;答案4错误,不能将立即数送入内存空间
四、能够只将al中的内容压入栈的指令序列是 3 。
1、 push al
2、 pop ax
3、 mov ah,0
push ax
4、 mov ax,0
push ax
解析:答案1错误,push操作单位是字;答案2错误,题目要求的是入堆;答案3正确,先将ah清零,然后压入ax可以达到目的;答案4错误,将ax清空,然后压入,等于压入的是0
五、若将以1000H为段地址的整个段空间当作栈使用,那么寄存器SP的初始值最合理的设置是 1 。
1、 0000H
2、 0001H
3、 FFFFH
4、 FFFEH
解析:以1000H为段地址的整个段空间,偏移地址为0- FFFFH,当栈中只有1个字时,偏移地址是FFFEH,当栈为空时,SP=SP+2=FFFF+2=0000,所以选择1
六、在8086CPU系统中一个栈段的容量最大为 3 。
1、 1KB
2、 512KB
3、 64KB
4、 32GB
解析:由于8086CPU寄存器只有16位,而SP等寄存器最大变化范围就只能为0~FFFFH,即64KB了…不仅仅是栈段,所有的8086CPU里面的段都不能超越64KB
楼主意思不太明确。
我的理解是:
在DEBUG状态下,用A命令输入mov ax,2 后为什么ax寄存器中的内容没变?
这是因为你还没有让系统执行这条指令,执行的方法是用P或T指令。
立即数不能直接传递给段寄存器
mov ax, x ;允许(x是变量)
mov ax, 2 ;不允许(2是立即数)
具体可以看下已有百度高人回答过的:
http://zhidao.baidu.com/question/53623299.html?fr=qrl&cid=865&index=5&fr2=query
ExitProcess@4是系统函数,你要包含系统库的
你要用
includelib
kernel32.lib
加入要用的库的
你才开始学习汇编,最好先只用简单DOS的功能调用(ExitProcess是windows函数)
另外,英文是编程的基础,你若要学好编程,英文也要补下
别听一楼的,一楼的那位大哥,只有DS寄存器不允许值传递,也就是不能将立即数移动到DS寄存器中,我认为楼主用的是2号dos功能调用。mov ax ,2后面应该有一行int 21h,作用为显示一个字符。