王爽老师《汇编语言》P173页的实验7题目的解法

这题看似烦乱,其实只要熟悉数据结构,还是很容易搞定的。12月26日晚,我解了一遍,12月27日上午,我又解了一遍,以作巩固。结果这两遍稍微有所不同,但效果一样。贴出来供大家探讨。

12月26日版本:

assume cs:code,ds:data,es:table

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

table segment

db 21 dup (‘year summ ne ?? ‘)

table ends

code segment

start: mov ax, data

mov ds, ax

mov ax, table

mov es, ax

mov bx, 0 ;bx用来表示data段中的偏移地址

mov si, 0 ;si用来表示data段中的偏移地址

mov di, 0 ;di用来表示table段中的偏移地址

mov dx, 0 ;dx用来存放被除数的高位数据

mov cx, 21

s0: mov ax, [bx+0]

mov word ptr es:[di], ax

mov ax, [bx+2]

mov word ptr es:[di+2], ax

mov ax, [bx+84]

mov word ptr es:[di+5], ax

mov ax, [bx+86]

mov word ptr es:[di+7], ax

mov ax, ds:[si+168]

mov word ptr es:[di+10], ax

mov ax, [bx+84]

mov dx, [bx+86]

div word ptr ds:[si+168]

mov word ptr es:[di+13], ax

add bx, 4

add si, 2

add di, 16

loop s0

mov ax, 4c00h

int 21h

code ends

end start

接下来是12月27日的版本:

assume cs:code,ds:data,es:table

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

code segment

start: mov ax, data

mov ds, ax

mov ax, table

mov es, ax

mov bx, 0

mov si, 0

mov di, 0

mov cx, 21

s0: mov ax, [bx+si]

mov word ptr es:[di], ax

mov ax, [bx+si+2]

mov word ptr es:[di+2], ax

mov ax, [bx+si+84]

mov word ptr es:[di+5], ax

mov ax, [bx+si+86]

mov word ptr es:[di+7], ax

mov ax, [bx+168]

mov word ptr es:[di+10], ax

mov ax, [bx+si+84]

mov dx, [bx+si+86]

div word ptr [bx+168]

mov word ptr es:[di+13], ax

add bx, 2

add si, 2

add di, 16

loop s0

mov ax, 4c00h

int 21h

code ends

end start

如果朋友们有更好的解法,欢迎跟帖指教!

时间: 2025-01-23 04:22:15

王爽老师《汇编语言》P173页的实验7题目的解法的相关文章

王爽《汇编语言》(第三版)实验8解析(超详细)

题目 分析程序,在运行前思考:这个程序是否能够正确返回? 运行之后再思考:为什么是这种结果? 通过这个程序加深对相关内容的理解. 贴入代码如下: assueme cs:codesg codesg segment mov ax,4c00h int 21h start: mov ax,0 s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],ax s0: jmp short s s1: mov ax,0 int

王爽《汇编语言第二版》读后感。

读了王爽的<汇编语言第二版>已经快两个月了,前几章写的都是些好理解的,所以速度稍快,到了中间,需要运用前面所学知识才能消化,所以有些稍慢.中间章节是汇编的语言核心,所以后面几章是汇编语言组织方式(子程序,中断安装等)和编程技巧,最爽的是有大段大段的完整代码展示.如果认真读过,经过中间章节的彷徨,到最后几章略有大功告成之感,速度稍快,跟心情感觉有很大关系.书中每个章节的题目都认真分析了,在网上下载了<王爽<汇编语言>第二版的习题答案>.不说了,虽然理解了书中代码,但一些编

【汇编语言】(王爽著第三版)实验二

实验二 实验任务(一) 实验前要求我们将书本P74的程序段按理论分析,将结果进行填空.之后用Debug,将该程序段写入内存,逐条执行之后, 根据指令执行后的实际运行的结果填空如下. mov ax,0021 mov  ax , ffff mov  ds , ax mov  ax , 2200 mov  ss , ax mov  sp , 0100 mov  ax , [0]                       ;ax=3130 add  ax , [2]                 

汇编“生活”(一)——王爽《汇编语言》实验9程序代码——改变显示器字体颜色

assume cs:code ;显示器上显示绿色.绿底红色.白底蓝色字符串'welcome to masm!' data segment db 'welcome to masm!' db 00000010b,00100100b,01110001b data ends code segment starts: mov ax,data mov ds,ax mov bx,0 mov ax,0b800H mov es,ax mov bp,0000H ;设置'welcome'的颜色 mov dl,ds:[

王爽《汇编语言第三版》实验10-1代码实现

;编写一个通用的子程序实现这个显示字符串的功能,提供灵活的调用接口,使调用者;可以决定显示的位置,内容,颜色assume cs:code,ss:stack,ds:data data segment        db 'welcome to masm!',0 ;要显示的字符串data ends stack segment        db 128 dup (0)stack ends code segment start: mov dh,23    ;行数        mov dl,10   

王爽《汇编语言》第三版 第十五章 外中断

引言 CPU 除了有运算能力外,还要有 I/O( Input/Output ,输入/输出)能力. 15.1 接口芯片和端口 在PC系统的接口卡和主板上,装有各种接口芯片.这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问. 外设的输入不直接送入内存和CPU ,而是送入相关的接口芯片的端口中. CPU向外设的输出也不是直接送入外设,而是先送入端口中,再由相关的芯片送到外设. 15.2 外中断信息 当CPU 检测到可屏蔽中断信息时: 1.如果IF=1,则CPU 在执行完当前指令后响

王爽《汇编语言》第三版 第五章 [BX]和loop指令

5.1 [bx] mov ax,[bx]功能:bx 中存放的数据作为一个偏移地址EA ,段地址SA 默认在ds 中,将SA:EA处的数据送入ax中. 5.2 Loop指令 指令的格式是:loop 标号,CPU 执行loop指令的时候,要进行两步操作: 1.(cx)=(cx)-1: 2.判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行. 通常我们用loop指令来实现循环功能,cx 中存放循环次数. 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器

王爽《汇编语言》第三版 第三章 内存访问

3.1 内存中字的存储 在0地址处开始存放20000(4E20H): 注意:0号单元是低地址单元,1号单元是高地址单元. 任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元. 3.2 DS和[address] 在8086PC中,内存地址由段地址和偏移地址组成,8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址. 执行指令时,8086CPU自动取DS中的数据为内存单元的段地址. 3.3 字

王爽《汇编语言》第三版 第二章 寄存器

CPU概述 一个典型的CPU由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其它器件的联系. 8086CPU有14个寄存器 它们的名称为:AX.BX.CX.DX.SI.DI.SP.BP.IP.CS.SS.DS.ES.PSW. 2.1 通用寄存器 8086CPU所有的寄存器都是16位的,可以存放两个字节. 8086上一代CPU中的寄存器都是8位的: 为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用. 1.