第七章 更灵活的定位内存地址的方法
2.编程,完成问题7.9中的程序
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start:mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s0:push cx
mov si,3
mov cx,4
s:mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s
add bx,16
pop cx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
第八章 数据处理的两个基本问题
assume cs:codesg, ss:stack,ds:data
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'
dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
assume cs:codesg, ss:stack
stack segment
dw 8 dup (0) ;存放cx
stack ends
codesg segment
start:mov ax,table
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov es,ax
mov cx,21
mov si,0
mov bx,0
year:push cx
mov di,0
mov cx,4
s:mov al,es:[si]
mov [bx+di],al
inc si
inc di
loop s
add bx,16
pop cx
loop s
mov cx,21
mov bx,0
incom:mov ax,es:[si]
mov [5+bx],ax
add si,2
mov ax,es:[si]
mov [7+bx],ax
add si,2
add bx,16
loop incom
mov cx,21
mov bx,0
staff:mov ax,es:[si]
mov [10+bx],ax
add bx,16
loop staff
mov cx,21
mov bx,0
ave:mov ax,[bx+5]
mov dx,[bx+7]
div word ptr [bx+10]
mov [13+bx],ax
add bx,16
loop ave
mov ax,4c00h
int 21h
codesg ends
end start
第九章 转移指令的原理
1.分析下面的程序,在运行前思考,这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
可以正确返回。通过ax将s2的地址传送到s,jmp short s
实际跳转到s2,而s2中jmp short s1
计算的是s1,s2之间的偏移量,然后加上s的地址,实际跳转到首地址,完成返回
2.编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’。
;在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串’welcome to masm!’
assume ds:data, cs:code
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0