📄 3.txt
字号:
LEA SI ,[CONAME+3]
LODSW
(4)把AX寄存器的內容存入從PRLINE+5開始的字節中的程序實現:
LEA DI ,[PRLINE+5]
STOSW
(5)檢查CONAME字符串中有無空格字符,如有把它偉送給BH寄存器的程序實現:
LEA DI,CONAME ;把CONAME中第一個字符偏移地址放入DI中
MOV CX,20 ;把重複次數放到CX中
MOV AL,20H ;把空格符的ASCII值放入AL中
CLD ;從低到高
REPNE SCASB ;比較
MOV BH,[DI-1]R ;把檢查到的空格符送到BH中
30。
MOV CX,12H ;把重複次數放到CX中。這裏用十六進制表示
MOV SI,0 ;初始化SI
MOV AX,26H ;把&字符的ASCII值放入AX
CHECK: CMP AX,STRING[SI] ;依次查找
INC SI
LOOPNE CHECK ;找到了就退出
MOV AX,20H ;把空格符的ASCII值勤放入AX中
MOV STRING[SI-1],AX ;用空格符代替&
31。(1)用空格符清除PRINT_LINE域的程序实现:
MOV AL,20H
LEA DI ,PRINT_LINE
MOV CX,132
CLD
REP STOSB
(2)在STUDENT_ADDR中查找 第一个’_‘的程序实现:
MOV AX,2DH ;把“—”的ASCII值放入AX
MOV SI,0 ;初始化SI
MOV CX,9 ;把重複次數放入CX中
;依次檢查STUDENT-ADDR中的字符是否為"_",找到第一个停下来
CHECK:CMP AX ,STUDENT_ADDR[SI]
INC SI
LOOPNZ CHECK
(3)在STUDENT_ADDR中查找最后一个”_“的程序实现:
;和第二題不同的就是這次是從右到左查詢,所以SI的初始化為9
MOV AX,2DH
MOV SI ,9
MOV CX,9
CHECK :CMP AX,STUDENT_ADDR[SI]
DEC SI
LOOPNZ CHECK
(4)程序實現:
MOV AL,2OH ;把空格符的ASCII值放入AL中
LEA DI ,STUDENT_NAME ;把STUDENT_NAME中第一个字符偏移地址放到DI中
MOV CX,30 ;把重复次数放到CX中
CLD ;让DI从低位移到高位
REPZ SCASB ;如果有不是空格符的,就退出
JZ STORE ;如果全是空格符,就转到STORE中
;用*代替空格
STORE:MOV AL 2AH
MOV CX ,30
STD ;注意,这里是把前面从低到高移动的DI再从高到低移上去~~
REP STOSB
(5)程序实现:
;把STUDENT_NAME 移到PRINT_LINE的前30个字节中
LEA SI, STUDENT_NAME
LEA DI,PRINT_LINE
MOV CX ,30
CLD
REP MOVSB
;把STUDENT_ADDR移到PRINT_LINE的后9个字节中
LEA SI ,[STUDENT_ADDR+9]
LEA DI,[PRINT_LINE+132]
MOV CX,9
STD
REP MOVSB
32。程序实现:
。。。
LEA SI,OLDS
LEA DI,NEWS
MOV CX,5
REPZ CMPSB
JNZ NEW_LESS
。。。
33。
(1)CMP DX,CX
JA EXCEED
(2)CMP BX,AX
JG EXCEED
(3)CMP CX,0
JZ ZERO
(4)CMP BX,AX
JO OVERFLOW
(5)CMP BX,AX
JLE EQ_SMA
(6) CMP DX,CX
JBE EQ_CX
34。(1)跳转到:L1
(2)跳转到L1
(3)跳转到L2
(4)跳转到L5
(5)跳转到L5
35。
(1)可以引起转移到L1的指令有: NB ,BE ,NL ,LE
(2)可以引起转移到L1的指令有: 同上
(3)可以引起转移到L1的指令有: B,BE ,L , LE
(4)可以引起转移到L1的指令有: NB ,NBE ,NL ,NLE
(5)可以引起转移到L1的指令有: 同上
(6)可以引起转移 到L1的指令有: 同(3)
(7)可以引起转移 到L1的指令有: 同上
36。
37。 程序流程图就不画了,呵呵,程序如下~~
MOV AL,STAUS[SI] ;把要测试的字节放到AL中
AND AL,2AH ;把第一,三,五位为一其他位为0的数--2AH,与这个字节比较,结果
;放到AL中
JZ ROUTINE_4 ;如果结果为0,则三位都为0
XOR AL,2AH ; 前面相与的结果再与2AH异或
JZ ROUTINE_1 ;如果结果为0,则三位都为1
BSF BL,AL
BSR BL ,AL
CMP BL,CL
;如果向前和向后测试后,第一个1 的位置相同,说明只有一个1,则异或运算前有AL中有两个1
JE ROUTINE_2
ROUTINE_1
注:本题还有其他解法,请大家自己试试~~
38。(1)当括号内是:LOOP时,循环四次,程序结束后
(AX)=05 (BX)= 16 (CX)=0 (DX)=0
(2) 当括号内是: LOOPE 时,不循环,程序结束后
(AX)=02 (BX)=04 (CX)=03 (DX)=02
(3)当括号内是:LOOPNE 时:循环三次,程序结束后
(AX)=04 (BX)=11 (CX)=01 (DX)=0
39。图,就不画了,呵呵~~自己看一下课本,P101~~
40.。(1)0000 3100H (2)5100H (3)7100H
41。 (1)目的地址:2004H 内容依次为: 56H F4H 23H 98H
(2)目的地址: 384CH 内容依次为: 91H 34H F2H 01H
(3)目的地址: 寄存器,无物理地址~ 内容依次为:92H 6DH A2H 4CH
42。 (1)PUSH AX
(SP)<------(SP)-2
(SP+1)<-----(AH) (SP)<------(AL)
(2)POP ESI
(ESI)<-------((ESP)+3,(ESP)+2,(ESP)+1, (ESP))
(ESP)<-------(ESP)+4
(3)PUSH [BX]
(SP)<------(SP)-2
(SP+1)<-----([BX+1]) (SP)<------([BX])
(4) PUSHAD
(ESP)<-------(EAX)
(ESP-4)<-------(ECX)
(ESP-8)<-------(EDX)
(ESP-12)<-------(EBX)
(ESP-16)<-------(ESP) ;这里指的是指令执行前的ESP
(ESP-20)<-------(EBP)
(ESP-24)<-------(ESI)
(ESP-28)<-------(EDI)
(ESP)<-------(ESP)-32
(5)POP DS
(DS)<------((SP)+1,(SP))
(SP)<------(SP)+2
(6) PUSH 4
(SP)<-------(SP)-2
(SP+1)<-----0
(SP)<------4
43。(1) 2CE FF93H (2) 24B 76A0H
(3) 909 0804H (4) 6F 13ADH
44。 (1)0FFFF FFFCH (2)0FFFF FFF8H
(3)0000 0007H (4)0000 0099H
45。 (EAX)=0 (EBX)=25d
46。 (AX)=3d (DX)=7d
47。ADD ECX,EDX
ADD ECX,ESI
MOV EDI ,ECX
48。 IMUL BX,DX,100H执行的操作是:
(BX)<-------(DX)*100H
49。程序实现:
MOV AL,BL
CBW
IDIV CL
IMUL 2
MOV DX,AX
50。
JMP DI 是直接跳转,执行的操作是: (IP)<-----(IP)+(DI)
JMP [DI]是间接跳转,执行的操作是: (IP)<----(IP)+([DI])跳转到DI中所指向的内存单元中的指令地址~
51。假设数组名为NUMBERS,程序如下~
MOV BX,0 ;后面用到~
MOV CX,100H ;把循环次数放入CX
MOV AL,42H
MOV SI,0 ;初始化SI
;CHECK 用来实现查找功能~
CHECK : CMP AL ,NUMBERS[SI]
INC SI
JB STORE1 ;大于42H的数的个数存入UP
JA STORE2 ;小于42H的的数的个数存入DOWN中~
LOOP CHECK ;相等继续循环~
STORE1 INC BL ;找到一个大于42 的数,BL值增加1~
MOV UP,BL
LOOP CHECK
STORE2 INC BH
MOV DOWN ,BH
LOOP CHECK
52。图,也不用画了~~呵呵~好了,本章结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -