第10章汇编测试题目
下列哪条指令不能够使CS:IP指向当前内存段范围内以s为标号的代码段______。 (4)
1、 jmp near ptr s
2、 jmp far ptr s
3、 call near ptr s
4、 call word ptr s
分析:call word后 必须明确给出内存单元地址,而不是给出标号s
下面指令执行后,ax中的数值为多少____ (2)
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0
1000:3 9a 09 00 00 10 call far ptr s
1000:8 40 inc ax
1000:9 58 s:pop ax
add ax,ax
pop bx
add ax,bx
1、 1006h
2、 1010h
3、 0020h
4、 000ch
分析:
程序执行到call far ptr s后,先把cs也压入堆栈中,然后把将IP=8压入堆栈中
pop ax 后,ax = 堆栈中的IP,即ax=8
pop bx 后,bx = CS =1000H
故:ax = 8+8 +1000H = 1010H
补全程序,实现从内存1000:0处开始执行指令。 (3)
assume cs:code
stack segment
db 16 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ax,____
push ax
mov ax,____
push ax
retf
code ends
end start
1、 cs,ip
2、 0,1000h
3、 1000h,0
4、 0,1000
分析:
主要是考核retf和堆栈的后进先出。
执行retf,相当于执行:pop IP pop CX
故,压栈时,先压入cx,再压入 IP
下面的程序执行后,ax中的数值为多少____ (4)
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,0
1000:3 e8 01 00 call s
1000:6 40 inc ax
1000:7 58 s:pop ax
1、 3
2、 1
3、 4
4、 6
分析:
当执行到call s时,IP地址为6
然后去执行call s操作,将6压入堆栈
到标号s处,将ax弹出 ax = 6
对下列程序说法正确的是_____。 (4)
assume cs:codesg
stack segment
dw 10 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
start: mov ax,stack
mov ss,ax
mov sp,20
mov ax,0
push cs
push ax
mov bx,0
retf
codesg ends
end start
1、 程序中start之后的汇编指令不能得到执行。
2、 程序加载后stack段在内存中实际占用的内存空间是20b。
3、 程序的每一条指令都能获得执行,但不能正常返回。
4、 指令retf可替换为ret,并能够正常返回。
分析:
1.end Start 指明了程序从start处开始运行,所有,start之后的汇编指令能够得到执行
2.因为段的大小必须是16的倍数,所以,实际占用的内存空间是32B
3.程序能够正确返回
4.正确,因为本程序中栈内的cs并未被改变 所以执行后ip =0 cs=cs依然可以返回
某程序中定义了如下数据:
data segment
db "Hello"
db 'world'
db "!"
db 'W','elcome'
db "to","masm!"
db "Bye",'b','ye!'
dw 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh
dd 16 dup (0)
data ends
下列说法正确的是______。 (3)
1、 该程序加载后其中的字符数据和数字数据在内存中都是以ASCII码的形式存放的。
2、 该程序加载后这组数据在内存中所占用实际空间是90HB。
3、 该数据段定义可放在该程序中end伪指令之前的任何位置。
4、 在编译阶段,该程序因如此定义数据而报错。
分析:
1.该程序加载后其中的字符数据和数字数据在内存中都是以二进制形式存放的。
2.在该程序中,db定义的数据长度为32B ,dw定义的数据长度为32B ,dd定义的数据64B 一共为80HB
3.正确
4.不会报错
下面的程序执行后,ax中的数值是多少____ 11
内存地址 机器码 汇编指令
1000:0 b8 00 00 mov ax,6
1000:2 ff d0 call ax
1000:5 40 inc ax
1000:6 mov bp,sp
add ax,[bp]
分析:
mov ax,6 ;ax = 6
call ax ;push 5, ip=6
inc ax ;
mov bp,sp ;bp = sp
add ax,[bp] ;ax = 6 ss:[sp] = 5
所以,ax= 6+5 = 11
下面的程序执行完add ax,5时,ax中的数值为多少____ 8
assume cs:code
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0 ;ds和ss指向stack sp=16 ax=0
call word ptr ds:[0EH] ; s的偏移地址被压入栈底,同时程序跳转到s
s: add ax,2 ;ax=2
inc ax ;ax=3
add ax,5 ;ax=8
mov ax,4c00H
int 21H
code ends
end start