两道汇编程序题

;编程1:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串“Welcome to MASM!” ­

assume cs:code, ds:data ­

data segment ­

db 'Welcome to MASM!' ­

db 02h, 24h, 71h ­

data ends ­

code segment ­

start: movax, data ­

movds, ax ­

movbx, 0;ds:bx指向data源地址 ­

movax, 0B800h ­

mov es, ax ­

mov si, 11*160+32*2 ;es:si用于定位文字显示区域 ­

mov di, 0;ds:di用于选择颜色 ­

movcx, 3 ­

s: pushcx ­

mov cx, 16 ­

­

s0: mov al, ­

mov ah, [di+16] ­

mov word ptr es:[si], ax ­

inc bx ­

add si, 2 ­

loops0 ­

­

sub si, 32 ­

add si, 0A0h ­

movbx, 0 ­

inc di ­

popcx ­

loop s ­

mov ax, 4c00h ­

int21h ­

code ends ­

end start ­

­

­

;编程2:当发生除法溢出时,在屏幕中间显示“Overflow!”,返回DOS ­

assume cs:code ­

code segment ­

;////do0安装程序//// ­

start: mov ax, cs ­

mov ds, ax ­

mov si, offset do0;设置ds:si指向源地址 ­

mov ax, 0 ­

moves, ax ­

movdi, 200h;设置es:di指向目的地址 ­

mov cx, offset do0end-offset do0 ­

;设置cx为传输长度 ­

cld;设置传输方向为正 ­

rep movsb ;将源地址所存放的数据全部存放到目的地址 ­

;////设置中断向量表//// ­

mov ax, 0 ­

mov es, ax ­

mov word ptr es:[0*4], 200h ­

movword ptr es:[0*4+2], 0 ­

movax, 4c00h ­

int21h ­

;////显示字符串“overflow!”//// ­

do0: jmp short do0start ­

db"Overflow!" ­

do0start:mov ax, cs ­

mov ds, ax ­

mov si, 202h;设置ds:si指向字符串 ­

mov ax, 0b800h ­

mov es, ax ­

mov di, 12*160+36*2;设置es:di指向显存空间中间的位置 ­

mov cx, 9 ;设置cx为字符串长度 ­

s: mov al, [si] ­

mov es:[di], al ­

inc si ­

add di, 2 ­

loop s ­

mov ax, 4c00h ­

int21h ­

do0end: nop;nop为空操作符,占一个字节 ­

code ends ­

end start­

你可能感兴趣的:(编程)