您的位置:首页 > 其它

《汇编语言》王爽第三版 - 实验10

2017-04-14 10:13 197 查看
(1)编写子程序参数 行,列,颜色,内容显示于屏幕上

DATAS SEGMENT
;此处输入数据段代码
db 'Welcome to masm!',0
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,DATAS
mov ds,ax
;此处输入代码段代码
mov dh,8  ;第8行
mov dl,3  ;第3列
mov cl,132  ;闪烁红色  10000100b
mov si,0
call show_str

MOV AH,4CH
INT 21H

;第八行第三列就是   b8000h + 7*160+3*2 处开始显示 列以字为单位
show_str: mov al,dh
sub ax,1
mov bl,160
mul bl
push ax
mov al,dl
mov bl,2
mul bl
pop bx
add ax,bx
mov bx,0b800h
mov es,bx
mov si,ax
mov bx,0
mov ah,cl   ;颜色填充ax高位

s:  mov al,[bx] ;字符填充ax低位
mov es:[si],ax ;复制到现存对应位置
add bx,1
add si,2
mov cl,al
jcxz ok   ;遇到0结尾字符串跳出循环
jmp short s

ok: ret

CODES ENDS
END START

(2)除法溢出处理



DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ax,4240H
mov dx,000fH
mov cx,0aH
call divdw

MOV AH,4CH
INT 21H
;X/N = int(H/N)*65536 + [rem(H/N)*65536+L]/N

divdw:
push ax
mov ax,dx
mov dx,0
div cx ;(H/N) 此时 (ax)= int(H/N) (dx) = rem(H/N)
mov bx,ax ; (bx) = int(H/N)
pop ax
div cx ;[rem(H/N)*65536+L]/N 因为上一步div 相当于把 rem(H/N)* 65536 存放到高位寄存器dx 此时把L出栈存放到了低位寄存器ax
mov cx,dx ; 余数放cx ax就是结果的低16位
mov dx,bx ;int(H/N)*65536 因为dx是高位存放寄存器相当于左移16位
ret
CODES ENDS
END START
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: