欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《汇编语言》王爽 实验

程序员文章站 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)将结果显示在屏幕中间