汇编语言的高手请进,问几个简单题目
B.大写字母全变成小写字母
;-------------------------------------
;宏定义1
;功能:把字符串中的大写改为小写.
;入口:字符串起始地址为STR_ADDR
; 字符串是以0结尾.
D2X MACRO STR_ADDR
LEA SI, STR_ADDR
LP1:MOV AL, [SI]
CMP AL, 0
JE FINI
CMP AL, 'A'
JB NEXT
CMP AL, 'Z'
JA NEXT
ADD AL, 20H
MOV [SI], AL
NEXT:
INC SI
JMP LP1
FINI:
ENDM
;-------------------------------------
;宏定义2
;功能:显示输出字符串.
;入口:字符串起始地址为STR_ADDR
; 字符串是以$结尾.
DISP_STR MACRO STR_ADDR
LEA DX, STR_ADDR
MOV AH, 9
INT 21H
ENDM
;-------------------------------------
;************************************************
DATA SEGMENT PARA PUBLIC 'DATA'
IN_M DB 255 ;限定输入字符个数.
N_SUM DB 0 ;实际输入的个数.
_TXT_ DB 256 DUP('$') ;输入文字区.
TIPS1 DB 7, 13, 10, 13, 10, 'Please input STR:', 13, 10, '$'
TIPS2 DB 7, 13, 10, 13, 10, 'The TXT is: ', 13, 10, '$'
TIPS3 DB 7, 13, 10, 13, 10, 'Please press any key... $'
DATA ENDS
;************************************************
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX, DATA
MOV DS, AX
;--------------------------------
DISP_STR TIPS1 ;宏调用:显示input
LEA DX, IN_M
MOV AH, 10 ;键盘输入字符串.
INT 21H
CMP N_SUM, 0 ;键入0个字符?.
JE EXIT ;退出.
DISP_STR TIPS2 ;宏调用:显示The TXT is
LEA SI, _TXT_
MOV BL, N_SUM
MOV BH, 0
ADD SI, BX
MOV BYTE PTR [SI], 0 ;在末尾添上0
D2X _TXT_ ;宏调用:大转小.
MOV BYTE PTR [SI], '$';在末尾添上$
DISP_STR _TXT_ ;宏调用:显示转换后的字符串.
EXIT:
DISP_STR TIPS3 ;宏调用:显示press any key
MOV AH, 1
INT 21H
MOV AH, 4CH ;结束程序.
INT 21H
CODE ENDS
;************************************************
END START
运行,显示如下:
c:\masm510>asdf
Please input STR:
lskdfsdDVODPFOKPDFKPXas,a;s;;svkspd9
The TXT is:
lskdfsddvodpfokpdfkpxas,a;s;;svkspd9
Please press any key...
c:\masm510>
PUSH DS
MOV AX,SEG INTRAD
MOV DS,AX
MOV DX,OFFSET INTRAD
MOV AL,60H ;中断类型号
MOV AH,25 H ;设置中断向量
INT 21H
POP DS
;中断服务程序名为INTRAD
INC AL
NEG AL
INC AL
MOV BL,7FH
ADC AL,BL
答:上述程序运行后,AL=80H,CF=0
2 下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置非0。试把空白处填上适当的指令(一个空白只填一条指令)。
答: xor ah,al
AND AH,08H
jz ZERO
MOV AH,0FFH
JMP NEXT
ZERO: MOV AH,00H
NEXT: …………
3. DATX1 DB 300DUP(?)
DATX2 DB 100 DUP(?)
…
MOV CX,100
MOV BX,200
MOV SI,0
MOV DI,0
NEXT:MOV AL,DATX1[BX][SI]
MOV DATX2[DI],AL
INC SI
INC DI
LOOP NEXT
答:上述程序所实现的功能是,将DATX1的最后100个字节复制到DATX2开始的存储单元中。
4. DATA1 DW ?
DATA2 DB 32 DUP9(?)
DATA3 DD ?
DLENGTH EQU $-DATA1
答:DLENGTH的值是38,它表示变量DATA1、DATA2、DATA3占用存储单元的字节数。
5. BUFF DW 7,6,'56',?
ARRAY DB 0,67H,7
BASUB EQU BUFF-ARRAY
答:BASUB的值是-8,其绝对值表示变量BUFF占用存储单元的字节数。
答:1 XOR AL,AL INC AL NEG AL INC AL MOV BL,7FH ADC AL,BL 答:上述程序运行后,AL=80H,CF=0 2 下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置非0。试把空白处填上适当的指令(一个空白只填一条指令)。答: xor ah,al AND AH,08H jz ZERO...
答:②保持程序功能情况下,程序中 可否改写为 33.已知:BX=4567H NEG BX INC BX NEG BX DEC BX 程序段执行后,BX=___,CF=___。34. MOV BL,64H MOV CL,03H XOR AX,AX AGAIN:ADD AL,BL ADC AH,0 DEC CL JNZ AGAIN 问:(1)该程序段完成的功能是:(2)AX=___。35.已知...
答:将EAX双字(4个字节)寄存器的值送入SS:[EBP-18]指向的堆栈区保存,004106B3是对当前指令所对应的段内偏移地址,8945 E8为该指令的机器代码;004106B6 |. 837D E8 FF CMP DWORD PTR SS:[EBP-18],-1 将刚刚存入SS:[EBP-18]单元的双字数与-1进行比较,004106B6是当前地址的段内偏移地...
答:1.PA=12FA0+015F=130FFH, 选C --- 2.考虑到寻址时IP的作用,选C. 变址寄存器 --- 3.下面有语法错误的指令是: 不许两个操作数同时是存储器类型 D. ADD [BP+2],DA1 (DA1是变量名)--- 4.完成对DX的有符号数除以2的指令是: B. SAR DX,1 --- 5.使进位位置1...
答:1 思路一 shl bl,1 adc bl,0 shl bl,1 adc bl,0 shl bl,1 adc bl,0 shl bl,1 adc bl,0 最简单的办法是 mov cx,4 rcl bl,cl 一般人我不告诉他 思路二 mov bh,bl and bh,0fh mov cx,4 shl bh,cl and bl,f0h mov cx,4 shr bl,cl and bl,bh 思路三 xor ax,ax mov ...
答:1、ARRAY是空间变量名,在语境下是数组的首地址,但是不是十四个字节,而是18个字节,9个字。DB定义字节,DW定义字(1字=2字节),DD定义双字。DW后的每一个十进制数都占用两个字节。2、ARYEND同ARRAY,也是空间变量名,在语境下是数组的首地址。?表示其空间内存放的是随机数。3、有一二可知,CX...
答:DATAS SEGMENT ORG 3500H NUM DW 20ABH ORG 350AH ASCINFO DB 0,0,0,0,"$"DATAS ENDS STACKS SEGMENT DB 100 DUP(?)STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV CX,4 MOV AX,[NUM]MOV SI,OFFSET ASCINFO AG: PUSH CX MOV ...
答:1、9098H是一个带符号数的补码,转换成二进制数为10010000 10011000B,它的最高位为1,即符号位为1,所以扩展后为11111111 11111111 10010000 10011000B,对应的十六进制数为FFFF9098H,同时,为了将以A到F开头的十六进制数和变量区分开,因为变量是以字母开头的,所以要将以A到F开头的十六进制数前加一个...
答:mov ah,0bh ;接收1个字符 int 21h cmp al,00h ;判断是不是非字符键 je checkkey mov ah,08h;否则接收1个字符 int 21h cmp al,1bh ;是ESC?je over ;是,则退出,返回DOS jmp checkkey ;不是,则接收1个字符后,再转按键发送 (2)试编写一段INTEL8251发送字符的程序段。data51 equ ...
答:3、1M是1024*1024,一个16位寄存器存储不下,所以分成两个寄存器存储。两个寄存器的数据怎么组合呢?标准就是前面一个寄存器的值左移四位+另一个寄存器的值 左移4位就相当于乘以16.4、这里面于是就对应了段寄存器和偏移寄存器的概念。5、“一次只能寻16个字节”的意思是,一个地址可以存放一个字节的...