《汇编语言》第二版(郑晓薇编著)第四章编程
2026/6/12 10:46:58 网站建设 项目流程

习题四

目录

习题四

4-23

4-24

4-25

4-26

4-27

4-28

4-29


4-23编程序。从键盘输入一个数字,去掉ASCII码后保存到BUFF单元。

DATA SEGMENT BUFF DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H SUB AL,30H MOV BUFF,AL MOV AH,4CH INT 21H CODE ENDS END START

4-24编程序。将键盘输入的小写字母变为大写字母显示在屏幕上。

DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H AND AL,11011111B ;写的时候最好写满8位 MOV DL,AL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START

4-25XY都是字节型数据,编写将两数相加的结果显示出来的程序段。

一定一定要注意计算结果是数值,但是屏幕显示的是ASCII码!

按我的定义如果X = 3,Y = 4(均为十进制),X+Y = 7,DL = 07H

但是显示字符时要求DL里的必须是ASCII码

4-26编写查表程序。建立一个班级姓名表,给出学号,可显示出其姓名。

DATA SEGMENT X1 DB 'zhang yan$' ; 10字节 X2 DB 'li li $' ; 10字节 X3 DB 'wang lan $' ; 10字节 X4 DB 'zhao xue $' ; 10字节 X5 DB 'li jiang $' ; 10字节 U DB 3 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, U MOV AH, 0 MOV CL, 10 MUL CL MOV DX, AX ADD DX, OFFSET X1 ;也可以写成 ;LEA DX,X ; ADD,DX,AX MOV AH, 09H INT 21H MOV AH, 4CH INT 21H CODE ENDS END START

4-27编写程序,建立一个09的平方根表,查表可得某数的平方根。

查表类问题的核心:输入编号 → 转成下标 → 用下标计算地址 → 从表中取数据 / 显示数据

表的首地址 + 下标 × 每项长度 = 目标数据地址

这里用了一个寄存器相对寻址,该好好复习一下了

X[BX] = DS:[OFFSET X+BX]

其中需要注意一下的是:

一张连续表只需要第一个 DB 前面有表名。
后面的 DB 不写表名,表示继续接着前面的数据存放。

DATA SEGMENT X DB '0.000','1.000','1.414','1.732','2.000' DB '2.236','2.449','2.646','2.828','3.000' Y DB 5 DUP(?);需要一个地方存放查出来的结果 U DB 3 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, U MOV CX, 5 MUL CL ;到这里为止其实是记录完起始下标x每段长度到BX ;这里其实有两个操作从 X 表中取字符 存到 Y 表中,所以需要两个位置指针 bx指向 X表里要取的位置 SI指向Y表里要取得位置 MOV BX, AX MOV SI, 0 LET1: MOV AL, X[BX];求表的下标实际地址是起始的偏移地址+下标长度x每段长度的地址 MOV Y[SI], AL INC BX INC SI LOOP LET1 MOV AH, 4CH INT 21H CODE ENDS END START

4-28编程实现公式计算Z=X/4+16Y

比较简单没什么好说的。后面复习了移位指令发现真是比IMUL IDIV好用多了,不要考虑来考虑去的考虑到底是应该八位还是16位还是32位,到底放AL还是AX,还是AH,DX,也不用考虑扩展CBW

DATA SEGMENT X DB 4 Y DB 1 Z DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X MOV BL,Y MOV CL,2 SAR AL,CL ; AL = X/4 MOV CL,4 SAL BL,CL ; BL = 16Y ADD AL,BL MOV Z,AL MOV AH,4CH INT 21H CODE ENDS END START

4-29编写程序段,将AL中的数乘以6,与CL相减后再除以3;把商保存到Y单元,余数保存到Y+1

有两种写法需要注意,要么像下面的写法

要么就写成:

Y DW ? .... MOV Y,AX

完整代码:

DATA SEGMENT Y DB ?, ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV CL, 3 MOV CH, 0 MOV AH, 01H INT 21H SUB AL, 30H MOV BL, 6 IMUL BL SUB AX, CX MOV BL, 3 IDIV BL MOV Y, AL MOV Y+1, AH MOV AH, 4CH INT 21H CODE ENDS END START

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询