汇编简答题
汇编简答题
栈顶超界什么情况下会超界
- 使用push指令,将10010H-1001FH当作栈空间,该栈空间容量为16字节。初始状态为空,ss=1000H,sp=0020H,ss:sp指向10020H;
在执行完8次push ax后,向栈中压入8个字,栈满,ss:sp指向10010H;
再次执行push ax: sp=sp-2,ss:sp指向1000EH,栈顶超出了栈空间,ax中的数据送入1000EH单元出,将栈空间外的数据覆盖。 - 使用pop指令也是如此,当超出栈空间继续pop的时候,ss:sp指向的将不属于栈空间内,这时如果执行push,其它位置的数据将被覆盖。
什么是中断?(描述中断的过程)
cpu在执行完当前正在执行的指令后,检测到cup外部发送过来的或者内部产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。这种信息叫中断信息。中断的意思指cup不再接着向下执行,而是转去处理这个特殊的信息。
**注意:**如果问的是什么情况会产生,则是下面的答案
(1)除法错误
(2)单步执行
(3)执行into指令
(4)执行int指令
(5)外中断
描述端口如何读写?
使用指令in和out用于从端口读取数据和往端口写入数据。
比如
in al,60h;从60h号端口读入一个字节
与总线相关操作如下:
①cpu通过地址线将地址信息60h发出
②cpu通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据;
③端口所在的芯片将60h中的数据通过数据线送入cpu。
使用
out 20h,al;往20h号端口中写入一个字节
备注(这里可不写) :只能使用ax或者al来存放从端口中读入的数据或者要发送端口的数据。访问8位端口时用al,访问16位端口时用ax。
0-255以内端口可以直接写端口号,超出必须放入寄存器中,如下:
mov dx,3f8h
in al,dx
out dx,al
Intel系列微处理器的三种工作模式
(1)实模式:工作方式相当于一个8086
(2)保护模式:提供支持多任务环境的工作方式,建立保护机制
(3)虚拟8086模式:可以从保护模式切换至其中的一种8086工作方式。这种方式的提供使用户可以方便地在保护模式下运行一个或多个原8086程序。
汇编编程题
汇编编程题
第一道
;利用loop指令,实现在2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中
assume cs:code
code segment
start: mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl,[bx]
mov ch,0
inc cx
inc bx
loop s
d: dec bx
mov dx,bx
mov ax,4c00h
int 21h
code ends
end start
第二道
;编程,用串传送指令,将data中的第一个字符串复制到它后面的空间中。
assume cs:code
data segment
db 'Welcome to masm!'
db 16 dup (0)
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov es,ax
mov di,16
mov cx,16
cld
rep movsb
mov ax,4c00h
int 21h
code ends
end start
如果有另一种类型出现std的
则
;编程,用串传送指令,将F000H段中的最后16个字符复制到data段中
assume cs:code
data segment
db 16 dup(0)
data ends
code segment
start:
mov ax,0F000h
mov ds,ax
mov si,0FFFFH
mov ax,data
mov es,ax
mov di,15
mov cx,16
;方向位置反
std
rep movsb
mov ax,4c00h
int 21h
code ends
end start
第三道
题目::安装一个新的int 7ch中断例程,为显示输出提供如下功能子程序
(1)清屏
(2)设置前景色
(3)设置背景色
(4)向上滚动一行
入口参数说明如下:
(1)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;
(2)对于1,2号功能,用al传送颜色值,(al)属于{0,1,2,3,4,5,6,7}中的一个。
assume cs:code,ss:stack
;设置栈存放位置
stack segment
dw 16 dup(0)
stack ends
code segment
start:
;中断安装程序
mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset screen
mov cx,offset gg-offset screen
cld
rep movsb
;修改中断向量表
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
;结束
mov ax,4c00h
int 21h
screen:
jmp short begin
table dw offset f1-offset screen+200h,offset f2-offset screen+200h,offset f3-offset screen+200h,offset f4-offset screen+200h
begin:
;根据输入的数字来调用程序
push bx
push ds
;下面是测试代码
mov bx,0
mov ds,bx
cmp ah,3
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr [table+bx-screen+200h]
sret:
pop ds
pop bx
iret
;0号程序,完成清屏
f1: push bx
push es
push cx
mov bx,0b800h
mov es,bx
mov cx,2000
mov bx,0
f1s:mov byte ptr es:[bx],' '
add bx,2
loop f1s
pop cx
pop es
pop bx
ret
;1号程序,完成设置前景色
f2: push bx
push es
push cx
mov bx,0b800h
mov es,bx
mov bx,0
mov cx,2000
f2s: and byte ptr es:[bx+1],11111000b
or es:[bx+1],al
add bx,2
loop f2s
pop cx
pop es
pop bx
ret
;2号程序,完成设置背景色
f3: push bx
push es
push cx
mov cl,4
shl al,cl
mov bx,0b800h
mov es,bx
mov bx,0
mov cx,2000
f3s: and byte ptr es:[bx+1],10001111b
or es:[bx+1],al
add bx,2
loop f3s
pop cx
pop es
pop bx
ret
;3号程序,向上滚动一行
f4: push cx
push si
push di
push es
push ds
f4s: mov si,0b800h
mov es,si
mov ds,si
mov si,160
mov di,0
cld
mov cx,24;24行所以24次
f4ss:
push cx
mov cx,160;两层嵌套循环
rep movsb
pop cx
loop f4ss
;最后一行清除
mov cx,80
mov si,0
f4sss:
mov ptr byte ds:[160*24+si],' '
add si,2
loop f4sss
pop ds
pop es
pop di
pop si
pop cx
ret
gg:nop
code ends
end start