《汇编语言》第二版(郑晓薇编著)第四章编程

发布时间:2026/6/12 10:47:07
《汇编语言》第二版(郑晓薇编著)第四章编程 习题四目录习题四4-234-244-254-264-274-284-294-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 START4-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 START4-25X和Y都是字节型数据编写将两数相加的结果显示出来的程序段。一定一定要注意计算结果是数值但是屏幕显示的是ASCII码按我的定义如果X 3,Y 4均为十进制XY 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 START4-27编写程序建立一个09的平方根表查表可得某数的平方根。查表类问题的核心输入编号 → 转成下标 → 用下标计算地址 → 从表中取数据 / 显示数据表的首地址 下标 × 每项长度 目标数据地址这里用了一个寄存器相对寻址该好好复习一下了X[BX] DS:[OFFSET XBX]其中需要注意一下的是一张连续表只需要第一个 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 START4-28编程实现公式计算ZX/416Y比较简单没什么好说的。后面复习了移位指令发现真是比IMUL IDIV好用多了不要考虑来考虑去的考虑到底是应该八位还是16位还是32位到底放AL还是AX,还是AH,DX也不用考虑扩展CBWDATA 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 START4-29编写程序段将AL中的数乘以6与CL相减后再除以3把商保存到Y单元余数保存到Y1有两种写法需要注意要么像下面的写法要么就写成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 Y1, AH MOV AH, 4CH INT 21H CODE ENDS END START