title: 汇编笔记_第十三章
date: 2019-01-02 15:45:55
tags:
int n:n为中断类型码,功能是引发中断过程
eg:将data段中的字符转化为大写
assume cs:code
data segment 
    db 'coversation',0
data ends
code segment
start:
    mov ax,data
    mov ds,ax
    mov si,0
    int 7ch
    mov ax,4c00h
    int 21h
code ends
end start
capital:
    push cx
    push si
change:
    mov cl,[si]
    mov ch,0
    jcxz ok
    and byte ptr [si],0DFH
    inc si
    jmp short change
ok:
    pop si
    pop cx
    iret
capitalend:nop
用7ch中断完成loop指令的功能
bx:保存位移(负的)
cx: 保存循环次数
所以7ch的功能有:
assume cs:code
code segment
start:
    mov ax,0b800h
    mov es,ax
    mov di,160*12
    mov bx,offset s-offset se
    mov cx,80
  s:
    mov byte ptr es:[di],'!'
    add di,2
    int 7ch
  se:nop
  mov ax,4c00h
  int 21h
code ends
end start
;int 7ch:
;直接修改IP的值到s处实现循环
;访问栈需要使用bp
lp:
    push bp
    mov bp,sp
    dec cx
    jcxz lpret
    add [bp+2],bx   ;[bp+2]即为IP
lpret:
    pop bp
    iret
rom中存放着BIOS(基本输入输出系统):
int 19h 进行操作系统的应道,从而将计算机交由操作系统控制BIOS主要分为:
ah=01h
ch=光标开始行
cl=光标结束行
int 10h
ah=01h
dh=行号
dl=列号
bh=页号
int 10h
ah=03h
bh=页号
int 10h
返回值:
dh=行号
dl=列号
cx=光标大小
ah=05h
al=页号
int 10h
ah=06h
al=0
bh=窗口颜色属性
ch=左上角行号
cl=左上角列号
dh=右下角行号
dl=右下角列号
int 10h
ah=06h
al=上卷行数
bh=卷入行属性
ch=左上角行号
cl=左上角列号
dh=右下角行号
dl=右下角列号
int 10h
ah=07h
ah=08h
bh=页号
int 10h
返回值:
ah=属性
al=字符
ah=09h
bh=页号
cx=字符重复个数
al=字符
bl=属性
int 10h
7   6 5 4  3  2 1 0
bl  r g b  i  r g b
闪烁 背景 高亮 前景
显示功能调用
ah=02h
dl=字符
int 21h
功能:屏幕上显示一个字符,光标跟随字符移动。检验DL是否为Ctrl_Break。
ah=06h
dl=字符
int 21h
功能:屏幕上显示一个字符,光标跟随字符移动。不检验Ctrl_Break。
ah=09h
ds:dx=字符串地址
int 21h
功能:屏幕上显示一串字符,光标跟随字符移动。要求字符串必须以$结尾。
输入
ah=01h
int 21h
返回值:AL=字符的ASCII码。
ah=07h
int 21h
返回值:AL=字符的ASCII码。不检验键入的字符是否为Ctrl_Break。
(end)
原文:https://www.cnblogs.com/31415926535x/p/10209817.html