机器语言重点归纳

原创
小哥 3年前 (2022-11-17) 阅读数 138 #大杂烩

文章目录

汇编简答题

汇编简答题

栈顶超界什么情况下会超界

  1. 使用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单元出,将栈空间外的数据覆盖。
  2. 使用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
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

上一篇:实验八 下一篇:计组复习大纲