汇编程序设计实验三

 

汇编程序设计实验三任务 1:书 P160 实验 6(2)任务 2:书 P172 实验 7任务 3:书 P187 实验 9任务 4(选做):进制转换(十进制—–十六进制)

汇编程序设计实验三

任务 1:书 P160 实验 6(2) 任务 2:书 P172 实验 7 任务 3:书 P187 实验 9 任务 4(选做):进制转换(十进制—–十六进制)

任务一 实验六代码

image-20230920083332695

任务二实验七代码:

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