mov ah, 2 int 21h loop lab3 mov ah, 4ch int 21h code ends
end start
10. 从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类的计数结果。 答:所求程序为: data segment
var1 db '请输入一串字符(不超过50个,遇回车结束):$' alpha dw ? number dw ? other dw data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax
mov dx, offset var1 mov ah, 9 int 21h mov cx, 50 lOP1: mov ah, 1 int 21h cmp al, 0dh jz close cmp al, 30h jl lab4 cmp al, 39h Jg lab2 inc number jmp lab5 lab2: cmp al, 41h jl lab4 cmp al, 5ah jg lab3 inc alpha jmp lab5 lab3: cmp al, 61h jl lab4 cmp al, 7ah jg lab4
inc alpha jmp lab5 lab4: inc other lab5: loop lOP1 close: mov ah, 4ch int 21h code ends
end start
11. 设平面上有一点P的直角坐标(X,Y),试编制完成以下操作的程序: (1)如P点落在第i(i=1,2,3,4)象限,则将i送quadrant单元; (2)如P点落在坐标轴上,则将0送quadrant单元。 答:所求程序为: data segment X dw -45 Y dw 82
quadrant dw ? data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax xor ax, ax cmp ax, x jz axis cmp ax, y jz axis cmp x, ax jl qua2_3 cmp y, ax jl qua4
mov quadrant, 1 jmp close
qua4: mov quadrant, 4 jmp close qua2_3: cmp y, ax jl qua3
mov quadrant, 2 jmp close
qua3: mov quadrant, 3 jmp close
axis: mov quadrant, 0 close: mov ah, 4ch int 21h code ends
end start
12.数据区中三个字节单元VAR1、VAR2及VAR3本应存放彼此相等的代码,现有一单元存错了代码。试编一程序,找出存错代码的单元,并将错误代码送入ERRO单元中,存放错误代码单元的偏移量送ADDR单元中。 答:所求程序为: data segment var1 db 74h var2 db 75h var3 db 74h erro db ? addr dw ? data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax lea bx, addr mov al, var1 cmp al, var2 jz lab3
cmp al, var3 jz lab2
mov ah, var1 mov erro, ah
mov [bx], offset var1 jmp close lab2: mov ah, var2 mov erro, ah
mov [bx], offset var2 jmp close lab3: mov ah, var3 mov erro, ah
mov [bx], offset var3 close: mov ah, 4ch int 21h code ends
end start
13. 试编一程序,统计出某数组中相邻两数间符号变化的次数。 答:所求程序为: data segment
array dw 74h,-28,32,-789h,456h,28h,795,-84h,-541h,48,-50 const equ ($-array)/type array -1 count db 0 data ends
code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax mov cx, const lea bx, array mov si, 0
lop: mov ax, [bx+si] and ax, 8000h mov dx, [bx+si+2] and dx, 8000h cmp ax, dx jz lab1 inc count lab1: add si, 2 loop lop mov ah, 4ch int 21h code ends
end start
14. 设某数据段已有N个学生的某科成绩,并按学号的次序存放在以STUDENT为首址各字单元的低字节中。现在要求按成绩的高低计算出名次,并把名次填入成绩所在字单元的高字节中,成绩相同者名次相同。试编制一程序实现上述要求。 答:所求程序为: data segment
student dw 74,82,52,67,76,82,74,74,87,95,92,78,61,78,65,72,73,75 const equ ($-array)/type student data ends code segment
assume cs:code, ds:data start: mov ax, data mov ds, ax mov bx, const lea si, student lop1: mov ax, [si] lea di, student mov cx, const lop2: cmp al, byte ptr [di] jge lab1
inc byte ptr [si+1] lab1: add di, 2 loop lop2 add si, 2
inc byte ptr [si+1]

