急!!!!五道汇编语言程序设计 程序分析题!!!不甚感激!!!

程序分析题
29. DA1 DB ′01234′
DA2 DB 5 DUP(0)

MOV SI,0
MOV CX,5
LOP:MOV AL,DA1〔SI〕
ADD AL,11H
OR AL,01H
MOV DA2〔SI〕,AL
INC SI
LOOP LOP
试问:(1)程序段执行后,写出DA2各字节中的数据。
(2)程序中MOV AL,DA1〔SI〕指令的源操作数是什么寻址方式
30.VAR1 DW 1234H,89,255,-2,-0AH
VAR2 DB 34,78H,44,22,19,-12

MOV AH,23H
LEA BX,VAR1+4
MOV AL,BYTE PTR 〔BX+1〕
MOV SI,WORD PTR VAR2+3
程序段执行后AX=_______,SI=_______。
31.BUF DW 1,0,0AB1CH,582H,9,3A04H,9,0

LEA DI,BUF
MOV CX,8
MOV AX,9
REPNZ SCASW
JNZ K1
SUB DI,OFFSET BUF
MOV DX,DI
SHR DX,1
ADD DL,30H
MOV AH,2
INT 21H
K1:……
上述程序执行后:(1)程序完成什么功能?(2)显示输出的是什么值?
32. MOV BX,1
XOR AX,AX
MOV CX,5
NEXT:ADD AX,BX
INC BX
LOOP NEXT
上述程序段执行后AX=_______;BX=_______。
33.设AL中高低4位分别有大于7的数,
MOV AH,AL
AND AH,88H
MOV AL,AH
OR AL,11H
程序段运行后,AH=_________,AL=_________。
34.AT DB 0AH,0BH,0CH,0DH,0EH,0FH,00H

MOV BX,0
LOP:MOV DL,AT〔BX〕
CMP DL,0
JZ DONE
ADD DL,37H
MOV AH,2
INT 21H
INC BX
JMP LOP
DONE:……
①上述程序段执行后在屏幕上显示的内容依次是:
②执行后BX=___________。
35.DEC2 DB′56′

XOR DI,DI
MOV BL,DEC2〔DI+1〕
AND BL,0FH
MOV AL,DEC2〔DI〕
AND AL,0FH
MOV DL,10
MUL DL
ADD AL,BL
上述程序段运行后,AL=_______,BL=________。
题为 全国2005年10月高等教育自学考试
汇编语言程序设计试题

第1个回答  2010-12-29
29、⑴DA2中的数据为:41H,42H,43H,44H,45H
⑵寄存器相对寻址。
30、AX=2300H,SI=162CH
31、⑴在BUF中查找第一个数值为9的数据并显示
⑵“9”
32、AX=000FH,BX=0006H
33、AH=88H,AL=99H
34、⑴依次显示:A,B,C,D,E,F
⑵BX=0007H
35、AL=02H,BL=06H本回答被提问者和网友采纳
第2个回答  2011-01-04
; 题目类别:将一段英文文章中的大小写字母互转大小写;统计出每个字母出现的次数,在屏幕显示,每显示一个字母发出一声提示音
; 题目来源:
; 程序使用说明:
; 1、提示输入不超过254个字符的一段英文文章;
; 2、统计每个字母出现的次数,区别对待大写字母与小写字母视为不同的字母(非字母字符不统计),同时,大小写字母互转
; 3、显示不同字母及其出现的次数,振铃一声;
; 4、显示转换后的英文文章
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push ds
push cs
pop ds
push cs
pop es
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov BYTE ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
pop ds
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -------------------------------------
; 功能:查找指定字母是否出现并统计出现次数
; 入口参数:AL=指定的字母
Statics_Letter proc Near
push cx
push bx
mov bx,Letter_Table ;出现过的字母及其次数地址
mov cx,Letters ;出现过的不同字母的数目
jcxz @@First_Time
@@Find_Letter: cmp al,[bx]
jnz $+7
inc BYTE ptr [bx][1] ;计数1次
jmp @@Finded ;出现过,计数1次后返回
inc bx
inc bx
loop @@Find_Letter
@@First_Time: mov [bx],al ;第一次出现,加入统计表
mov BYTE ptr [bx][1],1 ;计数1次
inc Letters ;出现过的不同字母的数目+1
@@Finded: pop bx
pop cx
ret
Statics_Letter Endp
; -------------------------------------
; 功能:延时指定的时钟嘀嗒数
; 入口:
; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)
Delay Proc Near
push dx
push cx
xor ax,ax
int 1ah
mov cs:@@Times,dx
mov cs:@@Times[2],cx
Read_Time: xor ax,ax
int 1ah
sub dx,cs:@@Times
sbb cx,cs:@@Times[2]
cmp dx,Didas
jb Read_Time
pop cx
pop dx
ret
@@Times dw 0,0
Delay EndP
; -------------------------------------
Didas = 3 ;时钟嘀嗒数
Letter_Table dw ? ;出现过的字母及其次数地址
Letters dw 0 ;出现过的不同字母的数目
Prompt_Str db 'Please input a string:',13,10,'$'
Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'
; -------------------------------------
Start: push cs
pop ds
push cs
pop es
Output Prompt_Str ;提示输入英文文章
lea dx,Buffer ;英文文章字符串缓冲区地址
mov ah,0ah
int 21h
call Output_CTLF ;输出一个回车、换行
lea si,Buffer[1] ;实际输入的字符数地址
cld
lodsb ;读取这个数目
mov di,si
mov cl,al
xor ch,ch
add di,cx
inc di ;出现过的字母及其次数地址
mov Letter_Table,di ;保存这个地址
Translate: lodsb ;读取一个字符
mov ah,al
or ah,20h ;按小写字母处理
cmp ah,'a'
jb Next_One ;不是字母,不转换
cmp ah,'z'
ja Next_One ;不是字母,不转换
call Statics_Letter ;查找指定字母是否出现并统计出现次数
xor al,20h ;关键指令:小写转换大写,大写转小写
mov [si-1],al ;写回原位
Next_One: loop Translate
mov BYTE ptr [si],'$' ;用'$'替换回车符
mov cx,Letters ;出现过的不同字母的数目
mov si,Letter_Table ;出现过的字母及其次数地址
Disp_Letter: lodsw ;读入一个字
mov dl,al ;出现过的字母
call Output_Chr ;显示一个字符
mov dl,':'
call Output_Chr
mov dl,7 ;响铃字符码
call Output_Chr
xor al,al
xchg al,ah ;AX=字母出现的次数
call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
call Delay ;延时六分之一秒
call Output_CTLF
loop Disp_Letter
call Output_CTLF
Output Buffer[2] ;输出转换后的文章
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Buffer db 255 ;字符串缓冲区
Code ENDS
END Start ;编译到此结束
相似回答