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