汇编基础
x86汇编语言基础习题练习
汇编基础习题
编写一个程序,计算的值。其中X、Y、Z均为16位带符号数,要求表达式的计算结果存放在数据段的RESULT单元中。
DATA SEGMENT X DW 2H Y DW 44H Z DW 8H RESULT DW ?DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,X MOV BX,Y IMUL BX ;有符号乘 SBB AX,Z ;借位减 IDIV X ;有符号除 MOV RESULT,AX JMP $ CODE ENDSEND START设某班学生(10名)某门课程的成绩存放在内存中,试编程统计90分以上、80-89分、70-79分、60-69分、低于60分的学生人数,并分别存放到A、B、C、D、E单元中。
DATA SEGMENT TAB DB 60,70,80,90,77,88,76,69,74,58 ;10个学生成绩 A DB 0H B DB 0H C DB 0H D DB 0H E DB 0HDATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TAB ;初始化指针 MOV CX,10 ;设置计数器初值 SELECT: MOV AL,[BX] CMP AL,90 ;大于等于90 JGE G1 CMP AL,80 ;大于等于80 JGE G2 CMP AL,70 ;大于等于70 JGE G3 CMP AL,60 ;大于等于60 JGE G4 JMP G5 ;其他G1: INC A JMP ENDLOOPG2: INC B JMP ENDLOOPG3: INC C JMP ENDLOOPG4: INC D JMP ENDLOOPG5: INC E JMP ENDLOOP ENDLOOP: INC BX ;指针移动 + 1 LOOP SELECT JMP $ CODE ENDSEND START用主程序、子程序结构实现判断textdata(10个单元)中的数据是否为“0”~“F”的ASCII码。若是,用十六进制数覆盖原单元,否则用0FFH覆盖原单元。
DATA SEGMENT TEXTDATA DB 03h,30h,35h,41h,46h,57h,78h,91h,01h,02h ;10个参数 RUSTDATA DB 10 DUP(?) DO DB ? NUM DB ?DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC MOV AX,DATA MOV DS,AX MOV BX,OFFSET TEXTDATA ;初始化指针 MOV SI,OFFSET RUSTDATA MOV CX,10 ;设置计数器初值 SELECT: MOV AL,[BX] CALL CHECK MOV [BX],AL MOV [SI],AL INC BX ;指针移动 + 1 INC SI ;指针移动 + 1 LOOP SELECT JMP $ START ENDP
;子程序 CHECK PROC CMP AL,'0' JGE CEK ;判断AL >= '0' JMP WRONGCEK: CMP AL,'F' JLE RIGHT ;判断AL <= 'F' JMP WRONGRIGHT: RETWRONG: MOV AL,0FFH RET
CHECK ENDP CODE ENDSEND START