1、1汇编语言程序设计习题习题一1、将下列二进制数化为十进制数和十六进制数:1) 11010011B (2) 11100100B (3) 11111111B (4) 10000000B2、试说明 16 位二进制表示的无符号整数和有符号整数所能表示的数值范围。3、将下列十六进制数化为十进制数和二进制数:(1) 0D742H (2) 8765H (3) 0FFDCH (4) 2468H4、设变量 A 的内容是 8 位二进制数(1) 将变量 A 所有位清零和置 1。(2) 将变量 A 的第 4 位清零,第 2 位置 1。(3) 将变量 A 的各位求反。5、将下列十进制数分别转换为非压缩的 BCD 码和压
2、缩的 BCD 码:(1) 46 (2) 52 (3) 99 (4) 376、求下列十进制数对应的 8 位二进制补码的表示形式:(1) -50 (2) 30 (3) -58 (4) -128习题二1、指出下列指令的寻址方式:(1) MOV CX,100 (2) MOV AX,25SI(3) MOV DIBX,AX (4) ADD AX,ADDR(5) MUL BL (6) INC WORD PTR BX+25(7) SUB AX,BP6 (8) JMP BX(9) IN AL,20H (10) STI2、指出下列指令中存储器操作数的物理地址的计算表达式:(1) MOV AL, SI (2) MO
3、V AX,BP+6(3) MOV 5BX+DI,AX (4) INC BYTE PTR BX+SI(5) ADD AL,ES:BX (6) SUB AX,ALFASI(7) JNC NEXT (8) MUL ALFA习题三1、判别下列语句是否有错并说明理由:(1) MOV SI, A (2) MOV AL,BX(3) MOV BL,SI+2 (4) INC BX(5) MOV 256, AL (6) MOV AX,BYTE PTR ALFA(7) MOV ALFA,BATA (8) MUL 25(9) PUSH 20A0H (10) POP CS2、请执行下段程序,给出各寄存器的内容:MOV
4、AX,0A0BHDEC AXSUB AX,0FFH2AND AX,00FFHMOV CL,3SAL AL,CLADD AL,25HXCHG AL,AHPUSH AXPOP BXINC BLMUL BL3、已知 AX=003AH,请根据 AX 值用指令实现:使BL=03H,BH 0AH,CX 03H0AH,DX23AH,SI0A3H ,DI0A03H。4、在 A 地址处有 100 个数据,今要求传送到 B 地址处,请编程实现。5、使 AL 高 4 位置 1,判断低 4 位是否大于 9,如大于 9,则使低 4 位变反,否则将低 4 位置成 9,试编程实现之。6、在 A、B 地址起各有 4 个字节单
5、元的无符号数,试编程实现二个无符号数的和,并将值存于 C 址起的单元中。7、阅读下面程序并说明其功能:LEA SI,ALP: IN AL,20HAND AL,0FHOR AL,30HCMP AL, *JZ ENDPRMOV SI,ALINC SIOUT 30H,ALJMP LPENDPR: HLT8、在 A 字单元有一个有符号被除数,在 B 字单元有一个有符号除数,求其商存于 C字单元中,余数存 D 字单元中,试编程实现之。9、在 A 址起有一个 50 字节长的字符串,请查找串中含有最后一个“?”字符字节相对 A 址的距离(设串中含有多个 “?”号) 。习题四1、阅读下面数据搬移程序段,改正使
6、用不当的语句。A DB 35,47,2AH, XYZB DB N DUP(0)N EQU AMOV SI,AMOV DI,BMOV CX,LENGTH ALP: MOV AX,SIMOV DI,AX3INC SIINC DIDEC CXLOOP LP2、下面为一个定义数据的段,请图示它们在存储器中的存放形式。DATA SEGMENTA DB 1,2,3,4B DB ABCDC DW 4 DUP(0)N EQU 12X DW 33020AHY DD 0ABCDHDATA ENDS3、按上题给出的数据结构,求下面表达式的值:SEG A、OFFSET A、TYPE A、SIZE A、LENGTH A
7、SEG C、OFFSET C、TYPE C、SIZE C、LENGTH C4、请编程实现由键盘输入你的名字(拼音名) ,并把它显示在屏幕上,在你的名字两端各加上三个“”号,如“LIMING” 。5、对下面程序进行注释,并说明其所实现的功能。DATA SEGMENTA DB 123ABCDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAST: MOV AX,DATAMOV DS,AXLEA BX,AMOV CX,6MOV AH,2LP: MOV AL,BXXCHG AL,DLINC BXINT 21HLOOP LPMOV AH,4CHINT 21HCODE E
8、NDSEND ST6、实现满足下面要求瓣各宏定义:(1) 可对任一寄存器实现任意次数的左移操作。(2) 任意两个单元中的数据相加存于第三个单元中。(3) 对任意 8 位寄存器中的数据转为 ASCII 码并在屏幕上显示。4习题五1、将在 A 单元中的二位 16 进制数拆成二个 16 位数,并分别转换为相应的 ASCII 码存于 B 及 C 单元中。2、将 A 单元的内容求补,并与原内容相 “与” ,结果存入 B 单元中。3、在 ABC 起的连续 4 个单元中放有 4 个无符号数。试编程实现第 1、4 二数求和,再减去第 2 数和第 3 数,结果存入 XYZ 起的单元中。4、判 PAR 单元数据的
9、奇偶性,当为奇数时置 MARK 单元为 1,当为偶数时置MARK 单元为 0。5、将 A 单元起的 100 个数据移到 B 单元起的存储区中,试用三种方法实现数据的转移。6、把 A 单元起三个单元中的无符号数,按递增顺序重新排序,并放回原存储单元中。7、在 MN 起的三个单元中存有三个字符,要求将第一个字符高 4 位清零,第二个字符右移 4 位,且移入第三个字符的低 4 位而保持第三个字符的高 4 位不变,试编程实现。8、从键盘输入一个字符,根据其内容对 X 单元按下式赋值,请编程实现。9、在 A、B 单元各有一个有符号数,从键盘输入一个字符,当其为“A”时,表示将该二个有符号数相加,结果存入
10、 C 单元中。当收到“S ”时,表示将该二个有符号数相减,结果也存入 C 单元中。当为非 “A”或“S”时,则不做运算,置 C 单元为 0FFH。10、在数据段中有 5 组字符串(分别有不同含义) 。根据键入序号(15)输出对应序号的字符串到屏幕。要求编写为循环程序,可键入不同序号并显示相应字符串。11、在 A 数据区有一个 25 个字符的字符串,试编程实现按 ASCII 码值进行升序的排序。12、在 ARRAY 址起有 20 个有符号数。试编程将其正数存于 A 起的单元中。负数存于 B 起的单元中,且显示正数及负数的个数。13、有一个 50 个字符的串,试把其中小写字母改为大写字母,把数字改
11、为“” ,其它字符不变。14、统计一班 30 名学生成绩的等级(A:90100,B:8089,C :7079,D:6069,E:60 以下) 。统计结果分别存入A,B, C,D, E 单元中。15、从键盘上输入二个字符存 A,B 单元中,比较它们的大小写,并在屏幕显示:AB 或 BA 。16、对双字变量 DV 中的值为 1 的位进行统计,统计结果存入 XN 单元中。17、有一个 50 个数字的数据区,统计其为偶数和奇数的数字各为多少,分别存入 A和 B 单元中。18、对 A 址起的 30 个字节长的字符串,删除其中的数字符,后续字符向前递补,剩余字符补空格字符,编程实现之。19、将 CSTRN
12、 起的 50 个字符的串,统计相同字符的字符数,找出相同字符数最多的字符,存于 CMORE 单元中。20、数组 A 和 B,各有 20 个数据,它们各已按升序排放。现要求将这两个数组合并为一个数组 C,且要求其数据也按升序排放,试编程实现。字 母 字 符数 字 符非 字 母 数 字 符yx10521、已知两组字符串,各有 50 个字符。找出同在两串中的字符存于第三组字符串中,并统计串长存于 SL 单元中。22、在 NUM 单元起,存放有 a,b,c,d 4 个数,求(a*b+10)*10+c)*10+d 运算,结果存入 RESL 字单元中(设结果小于 16 位数) 。23、通过平方表,完成下式
13、运算:x=a 2+b2。式中 a、b 为 19 间的数。24、编程:(1) 将 A 址起的 20 个无符号数按升序排放在原址处。(2) 将已排好序的20 个数,查找有否与 AL 中数值相同的数。 (3) 有相同的数,显示“YES” ,无相同的数,显示“NOT ”。编写上述任务为子程序,并由主程序调用相应子程序完成。25、在 A 址起有 10 个压缩型 BCD 数。(1) 将 BCD 数转为的 ASCII 码。(2) 将ASCII 码在屏幕上显示。试编写子程序及调用程序。26、编程:(1) 键入某班学生(30 人)的计算机考试成绩。成绩按学号(130)排放在 SCORE 数据区中。(2) 按考分
14、降序排列,存到 ORDER 数据区中。(3) 在屏幕显示前三名学生的成绩。请编写主程序及三个子程序,实现调用关系。习题六1、写出将一个字节数据 A 输出到端口 25H 的指令。2、编一段程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第 0 位为 1,与其相应的设备就输入一个字符;如果其中任一状态寄存器的第 3 位为 1,则整个输入过程就结束。两个状态寄存器的端口地址是 0024H 和 0036H,与其相应的数据输入寄存器的端口为 0026H 和 0038H,输入字符分别存入地址为 BUFFER1 和 BUFFER2 的存储区中。3、指出类型 15H 的中断向量在存储器的地址单元。4
15、、CPU 与输入输出设备之间的数据传送方式有哪几种?它们各有什么特点?习题七1、完成下面操作:(1) 读当前光标位置,改变光标属性为反相显示。(2) 移光标到屏幕左上角,且以闪烁方式显示一个梅花字符。2、利用 DOS 功能调用,实现键盘屏幕人机对话。对话内容中的屏幕问话如下:“你叫什么名字?” 、 “你几岁了?” 。再根据年龄进行分支,30 岁以下为青年,可输出信息“啊!你很年青,前途无量!” 。50 岁以下为中年,可输出信息“啊!大展宏图的年纪,祝您事业成功!” 。对 50 岁以上的人,可输出信息“硕果累累,祝你永远健康!” 。3、编程实现一个电子表。要求在屏幕的右上角开窗并显示时、分、秒。
16、4、在屏幕上显示一个“”字符。要求背景颜色不断改变(间隔 0.5 秒) ,且“”字符可在屏幕上无规则移动(速度 0.1 秒) 。试编程实现。5、利用 ASCII 码表,编制一架小飞机图形,在屏幕上自左向右不断地飞行的程序,要控制飞行的速度,在屏幕上每飞过一次约为 5 秒种。6、试在图形方式下编写一个在屏幕上可绘制你的汉字名字的程序,并用不同的颜色显示每个汉字。620、解决本题可以先设置两个寄存器,分别存放相对重复次数最多的字符和字符数。每当字符串中 一个字符的重复次数统计完毕后,都与记录相对重复次数最多的寄存器内容进行比较,大者存入该寄存器并记录相应的字符。如此逐个判断、统计,直至字符串结 束
17、。最后将重复次数最多的字符送入 CMORE 单元中。参考编程如下:LEA BX,CSTRN ;字符串首地址送 BXMOV CL,50 ;字符串长度送 CLMOV DX,0MOV AL,BXMOV CMORE,ALLP: MOV AL,BXCALL CPP ;调统计重复字符数子程序CMP DH,DL ;重复字符数比较JNC NEXTMOV DH,DLMOV CMORE,ALNEXT: INC BXDEC CLJNZ LP ;字符串未完,继续HLTCPP PROCMOV CH,CLMOV SI,BXINC SILP1: CMP AL,SI ;判断是否重复 JNZ NEXT1 ;不重复,转 NEXT
18、1INC DL ;重复,DL 计数器增 17NEXT1: INC SIDEC CHJNZ LP1 ;统计未完,继续RET ;返回CPP ENDP8电子表code segmentassume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,axmov ah,0 ;设置显示方式mov al,4int 10hmov ah,0bh ;置彩色调板mov bh,0mov bl,1int 10hmov ah,0bh ;置彩色调板mov bh,1mov bl,4int 10hmov ah,2 ;取系统时间int 1ahmov ax,0mov bx,0mov ah
19、,ch ;取系统时间mov al,cl ;保存分钟mov bh,dh ;保存秒mov bl,dl ;保存百分之一秒tt: 9push axpush bxmov ah,0mov al,4int 10hmov ah,0bhmov bh,0mov bl,1int 10hmov ah,0bhmov bh,1mov bl,4int 10hMOV AH,1 ;读键盘缓冲区字符INT 16hJZ wwMOV AH,8 ;从键盘输入字符INT 21hCMP AL,s ;输入 s,结束程序JE tuww: pop bxpop axcall xian ;调用显示子程序push axqu: mov ah,2 ;取系统时间int 1ahcmp bh,dh10je qupop axinc bh ;对时间进行加 1cmp bh,100jl ttmov bh,0inc alcall beepcmp al,100jl ttmov al,0inc ahcmp ah,24jl ttmov ah,0jmp tttu: mov ah,4chint 21hretxian proc ;对时间值进行处理并显示的子程序push sipush dipush dxpush cxpush bxpush axpop ax