OR CH, AH ;拼装高8位, CH ← AX 的 D15 ~D12 , CX 的 D11 ~D8 OR CL, BL ;拼装低8位, CL ← CX 的 D7 ~D4, BX 的 D3 ~D0 MOV DX, CX ;DX← CX
5、? 将内存(10050)单元的内容7AH拆成两段,每段4位,并将它们分别存入内存(10051)和(10052)单元。即(10050)单元中的低4位放入(10051)的低4位,(10050)单元中的高4位放入(10052)的低4位,而(10051)和(10052)的高4位均为零。
MOV AX,1000H
MOV DS,AX ;DS=1000H
MOV SI,50H ;需拆字节的指针SI=50H MOV AL,[SI] ;取一个字节到AL中 AND AL,0FH ;把AL的前4位清0
MOV [SI+1],AL ;把得到的后4位放到(10051)单元 MOV AL,[SI] ;再取出需拆字节放到AL中 MOV CL,4
SHR AL,CL ;逻辑右移四次,前4位补0 MOV [SI+2],AL ;放
6、? 在某字符串中查找是否存在′$′字符。若存在, 则将′$′字符所在地址送入BX寄存器中, 否则将BX寄存器清“0”。
CLD ;清除方向标志DF
MOV DI, 0100H ;送目标串首元素偏移地址 MOV AL, ′$′ ;关键字→AL REPNE SCASB ;找关键字 AND CX, 0FFH JZ ZER DEC DI
MOV BX, DI ;关键字所在地址→BX JMP ST0
ZER:MOV BX, 0 ;未找到, 0→BX ST0: HLT
7、? 将2000H:1200H地址开始的100个字节传送到6000H:0000H开始的内存单元中去。
7MOV AX, 2000H
MOV DS, AX ;设定源串段地址 MOV AX, 6000H
MOV ES, AX ;设定目标串段地址 MOV SI, 1200H ;设定源串偏移地址
MOV DI, 0 ;设定目标串偏移地址 MOV CX, 100 ;串长度送CX
CLD ;(DF)=0, 地址指针按增量方向修改 NEXT: REP MOVSB ;每次传送一个字节, 并自动修改地址指针及
;CX内容, (CX)=0就继续传送, 直至(CX)=0 8、? 求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(2800)单元中。 CLC ; 清除CF SUB AX,BX
JC AA ; CF=1转AA去执行(即AX<BX时转移)
11
MOV DI,2800H ; 结果指针DI=2800H MOV [DI],AX ; 结果送到2800H和2801H单元 HLT ; 暂停
AA: SUB BX,AX ; BX←BX-AX MOV DI,2800H MOV [DI],BX HLT
9、? 设AX寄存器中有一个16位二进制数,编一程序,统计AX中‘1’的个数,统计结果送CX中。 START:MOV CX,0 LOOP: SUB AX,0 JZ STP SAL AX,1 JNC NOD INC CX NOD: JMP LOOP STP: HLT
10、? 写程序将外设20H与30H端口的内容相乘,结果放在AX中。 START: IN AL,20H MOV BL,AL IN AL,30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT
12