汇编程序设计实验三
任务 1:书 P160 实验 6(2) 任务 2:书 P172 实验 7 任务 3:书 P187 实验 9 任务 4(选做):进制转换(十进制—–十六进制)
任务一 实验六代码
任务二实验七代码:
assume cs:codesg,ds:data,es:tables
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;以上表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的21个dword数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word型数据
data ends
tables segment;表要放到地方
db 21 dup ('year summ ne ?? ')
tables ends
codesg segment
start:
;初始化段寄存器
mov ax,data
mov ds,ax
mov ax,tables
mov es,ax
;主程序开始
mov cx,21;设置循环次数
mov si,0;设置行数下表
mov di,0;设置年份的下标
mov bx,84;设置收入的下标
mov bp,168;设置雇员数下标
;设置人均收入下标
s:;循环开始
;年份迁移
mov ax,[di]
mov es:[si+0],ax
add di,2;
mov ax,[di]
mov es:[si+2],ax
add di,2;
;添加一个字节的空格
mov al,' '
mov es:[si+4],al
;收入迁移
mov ax,[bx]
add bx,2
mov es:[si+5],ax
mov ax,[bx]
add bx,2
mov es:[si+7],ax
;添加一个字节的空格
mov al,' '
mov es:[si+9],al
;雇员书迁移(2字节)
mov ax,[bp]
mov es:[si+10D],ax
add bp,2
;添加一个字节的空格
mov al,' '
mov es:[si+12],al
;计算人均收入并填入
mov dx,es:[si+7];被除数的后两位
mov ax,es:[si+5];被除数的前两位
mov sp,es:[si+10]
div sp
mov es:[si+13],ax
;结束循环
add si,16;行数增加
loop s
;结束程序
mov ax,4C00H
int 21H
codesg ends
end start
任务三实验9代码
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db "welcome to masm!";要显示的内容
db 2;绿字的属性
db 24h;绿底红字的属性
db 71h;白底蓝字的属性
datasg ends
stacksg segment
db 16 dup(0)
stacksg ends
codesg segment
start:
mov ax,datasg
mov ds,ax;初始化数据段基地址
mov si,10h
mov di,1824;保存第一行字的起始位置,
mov ax,0b800h
mov es,ax;初始化显存基地址
mov cx,3;定义外层循环的次数(因为有三种类型要展示)
s1:
mov bx,0
push cx
mov cx,16;定义内层循环次数(因为共有16个字符)
s:
mov al,[bx];赋予字符的内容
mov ah,[si];赋予颜色的属性
mov word ptr es:[di],ax;加入显示
add bx,1
add di,2
loop s
inc si;下一种显示的属性
add di,128;增加一行
pop cx
loop s1
all:
jmp short all;产生死循环使得字符可以一直显示
mov ax,4c00h
int 21h
codesg ends
end start