两道汇编程序题

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

assume cs:code, ds:data­

data segment­

db 'Welcome to MASM!'­

db 02h, 24h, 71h­

data ends­

code segment­

start: mov  ax, data­

mov  ds, ax­

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

mov  ax, 0B800h­

mov es, ax­

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

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

mov  cx, 3­

s: push  cx­

mov cx, 16­

­

s0: mov al, ­

mov ah, [di+16]­

mov word ptr es:[si], ax­

inc bx­

add si, 2­

loop  s0­

­

sub si, 32­

add si, 0A0h­

mov  bx, 0­

inc di­

pop  cx­

loop s­

mov ax, 4c00h­

int  21h­

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­

mov  es, ax­

mov  di, 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­

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

mov  ax, 4c00h­

int  21h­

;显示字符串“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­

int  21h­

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

code ends­

end start­


版权声明:本文为Ostroff原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。