《汇编语言》王爽 实验
程序员文章站
2024-03-23 22:41:40
...
《汇编语言》王爽 实验
实验二
1.编程实现书上问题7.9
;通过编程将datasg段中每个单词前4个字母改写为大写字母
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:
codesg ends
end start
源代码:
;将datasg段中每个单词的前4个字母改成大写字母
assume cs:codesg,ss:stacksg,ds:datasg
;①segment是段的意思,是段定义伪指令
;②汇编中,有数据段,代码段,堆栈段以及附加段
;格式:
;段名 SEGMENT [定位类型] [组合类型] [类别名]
;段名 ENDS
;③功能:把程序分段,实现存储器的分段管理。
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
;伪指令db、dw、dd都可以定义字符串,但最多的是用db来定义字符串,其中一个原因是dw、dd定义的字符串到了内存中排序是相反的。
;db定义 字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
;dw定义 字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
;dd定义 双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4
;datasg中定义了4个字符串,每个字符串长度均为16字节,要求修改每个单词前4个字母,则要修改每个字符串的[3]~[6]
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
;用一个二重循环来解决,第一重循环用来循环字符串,第二重用来修改第一行字符串的【3】~【6】,共4*4次循环
;运用一个栈保存第一重循环数
s:push cx
mov di,3
mov cx,4
s0:mov al,[bx+di]
and al,11011111b
mov [bx+di],al
inc di
loop s0
pop cx
add bx,16
loop s
mov ax,4c00h
int 21
codesg ends
end start
2.寻址方式在结构化数据访问中的应用
Power idea 公司从1975年成立一直到1995年的基本情况如下。
下面的程序中,已经定义好了这些数据:
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980', '1981'
db '1982', '1983','1984', '1985','1986', '1987','1988'
db '1989','1990','1991','1992','1993','1994','1995'
;以上是表示21年的21个字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,118300,1843000
dd 2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
dw 5635,8226,11542,14430,15257,17800
;以上是表示21年公司雇员人数的21个word数据
data ends
table segment
;预留位置,用于显示数据
db 21 dup ('year summ ne ?? ')
table ends
编程,将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存到table段中:
提示,可将data段中的数据看成是多个数组,而将table中的数据看成是一个结构性数据的数组,每个结构性数据中包含多个数据项。可用bx定位每个结构性数据,用idata定位数据项,用si定位数组项中的每个元素,对于table中的数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式。
源代码:
3.将任意输入的十进制数(<32768)转换成四位十六进制进行输出显示。
要求:1)有提示信息
2)按下ESC推出程序
3)将结果显示在屏幕中间
上一篇: c语言小程序之扫雷简单实现
下一篇: 汇编实验四——扬声器程序设计